Cache consistency when using memcached and a rdbms like MySQL

后端 未结 4 687
无人及你
无人及你 2021-02-14 04:32

I have taken a database class this semester and we are studying about maintaining cache consistency between the RDBMS and a cache server such as memcached. The consistency issue

4条回答
  •  臣服心动
    2021-02-14 04:53

    The code below gives some idea of how to use Memcached's operations add, gets and cas to implement optimistic locking to ensure consistency of cache with the database.
    Disclaimer: i do not guarantee that it's perfectly correct and handles all race conditions. Also consistency requirements may vary between applications.

    def read(k):
      loop:
        get(k)
        if cache_value == 'updating':
          handle_too_many_retries()
          sleep()
          continue
        if cache_value == None:
          add(k, 'updating')
          gets(k)
          get_from_db(k)
          if cache_value == 'updating':
            cas(k, 'value:' + version_index(db_value) + ':' + extract_value(db_value))
          return db_value
        return extract_value(cache_value)
    
    def write(k, v):
      set_to_db(k, v)
      loop:
        gets(k)
        if cache_value != 'updated' and cache_value != None and version_index(cache_value) >= version_index(db_value):
          break
        if cas(k, v):
          break
        handle_too_many_retries()
    
    # for deleting we can use some 'tumbstone' as a cache value
    

提交回复
热议问题