根据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次。
有什么想法吗?
答案 0 :(得分:2)
这不是一个精确的LRU。通常,您不应对缓存中的事物可用性做任何假设。
精确的LRU会更昂贵,因为事情会频繁移动。相反,memcached不会将项目放在LRU的头部,如果最近这样做的话。