Memcached在达到最大内存后的分配策略的细节

时间:2010-09-27 15:35:34

标签: memcached

根据Memcached FAQ,当执行向缓存分配值并尝试达到内存限制时,会发生以下情况:

  

什么时候过期的缓存项目获取   从缓存中删除?

     

memcached使用   懒惰的过期,这意味着它使用   没有额外的cpu到期项目。当一个   请求项目(获取请求)它   检查到期时间以查看是否   该项目之前仍然有效   把它归还给客户。

     

同样在添加新项目时   缓存,如果缓存已满,它   将查看过期的项目   在更换之前更换   缓存中cache.used项目中使用的项目。

问题是,当它取代“最少使用的物品”时会发生什么。它是通过每个密钥的访问权限来维护排名,还是跟踪一段时间内的访问权限?

例如。我向缓存添加了2个项目(A和B)。 A和B的访问模式略有不同。我每小时访问A 5000次,而我每秒访问B一次。根据文档,似乎如果我在两小时后尝试添加另一个项目(C)并达到最大内存分配,则B将被删除。这是因为B只被访问了7200次,而A被访问了10000次。

这是对的吗?如果没有,是否有跟踪访问的滑动时间窗口?例如,如果窗口是30分钟,则会删除A,因为在过去的30分钟内它将被访问0次,而B将被访问1800次。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这不是一个精确的LRU。通常,您不应对缓存中的事物可用性做任何假设。

精确的LRU会更昂贵,因为事情会频繁移动。相反,memcached不会将项目放在LRU的头部,如果最近这样做的话。