Memcached'的详细信息;达到最大内存后的s分配策略

Memcached'的详细信息;达到最大内存后的s分配策略,memcached,Memcached,根据Memcached,当尝试向缓存分配值并达到内存限制时,会发生以下情况: 何时获取过期的缓存项 从缓存中删除? memcached的用途 延迟过期,这意味着它使用 没有额外的cpu过期项目。当 项目被请求(获取请求)将其删除 检查过期时间以确定 该项在之前仍然有效 将其返回给客户端 类似地,在将新项目添加到 缓存,如果缓存已满,则 将查看是否有过期的项目 先更换,再更换最小的 缓存中的已用项目。缓存中的已用项目 问题是,当它替换“最少使用的项目”时,会发生什么。它是简单地按访问权限为每个密钥

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

何时获取过期的缓存项 从缓存中删除?

memcached的用途 延迟过期,这意味着它使用 没有额外的cpu过期项目。当 项目被请求(获取请求)将其删除 检查过期时间以确定 该项在之前仍然有效 将其返回给客户端

类似地,在将新项目添加到 缓存,如果缓存已满,则 将查看是否有过期的项目 先更换,再更换最小的 缓存中的已用项目。缓存中的已用项目

问题是,当它替换“最少使用的项目”时,会发生什么。它是简单地按访问权限为每个密钥维护排名,还是跟踪一段时间内的访问权限

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

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


有什么想法吗?

这不是一个精确的LRU。一般来说,您不应该对缓存中的东西的可用性做出任何假设


一个精确的LRU会昂贵得多,因为东西移动得太频繁。相反,memcached不会将项目放在LRU的头部,如果最近这样做的话。

谢谢。当您说“不完全是LRU”时,您是否确认在所述场景中B最有可能被移除?当我读到关于删除算法的常见问题时,我很感兴趣。例如,如果一个项目在短时间内被访问的次数超过任何其他项目的访问次数,理论上它可能永远存在于缓存中,而不会再次被访问。每个板都有一个LRU列表(这使得在实践中查找空间O(1))。在给定的时间段内,给定的项不会多次移动到“最近使用”列表的开头(想象一对键每秒被敲击数十万次)。最终,如果需要特定大小的空间,还没有使用过的物品将被淘汰。