memcached是如何更新的?

时间:2013-10-23 21:42:44

标签: caching memcached

我之前从未使用过memcached,我对以下基本问题感到困惑 Memcached是一个缓存吗?我假设我们从数据库缓存数据以便更快地访问。那么当DB更新时谁负责更新缓存?当数据库更新后,我们的代码是memcached“理解”吗?

3 个答案:

答案 0 :(得分:3)

  

Memcached是一个缓存吗?我假设我们从数据库中缓存数据   更快的访问

是的,它是一个缓存,但您必须了解当您经常访问相同数据时,缓存会加快访问速度。如果您访问千位数据/对象,这些数据/对象总是彼此不同,则缓存无效。

回答你的问题:

  

那么当DB更新时谁负责更新缓存?

总是你,但你不必担心你做的是否正确。

  

当DB更新后,我们的代码是memcached“理解”吗?

memcached不了解您的数据库。 (实际上客户端甚至不知道服务器..)所以当你使用数据库的对象时,你应该检查缓存中是否存在,如果没有你放入缓存,否则你就没事了......就是这样。当这一刻到来时,memcache将释放旧数据使用的内存,或者您可以在选择的时间后告诉memcached释放数据(有关详细信息,请阅读API)。

答案 1 :(得分:1)

您有责任更新缓存(或某些插件)。

将会将查询压缩为某些关键功能并对其进行哈希处理。这是针对缓存进行测试的。如果值在缓存中,则直接从缓存返回数据。否则,执行查询,将其存储在缓存中并返回给用户。

在伪代码中:

key = query_key(your_sql_query)
if key in cache:
  return cache.get(key)
else:
 results = execute(your_sql_query)
 cache.set(key, results, time_to_live)
 return results. 

缓存会偶尔清除一次,您可以给一个密钥生存时间,然后刷新缓存的结果。

这是最简单的模型,但可能会导致一些不一致。

答案 2 :(得分:0)

一种策略是,如果您的代码也是唯一更新数据的应用程序,那么您的代码也可以在更新数据库后作为第二步刷新memcached。或者至少从memcached中逐出数据,因此下次应用程序想要读取它时,它将被迫从数据库中重新查询当前数据并将最新数据恢复到memcached。

另一种策略是将数据存储在memcached中,并带有到期时间,因此memcached会在一定时间后自动清除该数据元素。您可以根据您对数据更新频率的了解,以及您的应用程序读取过时数据的容忍程度来选择到期时间。

所以最终,你是负责将数据放入memcached的人。只有您知道哪些数据值得存储在缓存中,您希望将其存储在哪种格式,您希望查询它的频率以及何时刷新它。您可以根据具体情况做出判断,因为您比任何自动系统都更了解数据和应用程序的可能行为。