【问题标题】:Specifics on Memcached's strategy for allocation after max memory has been reached达到最大内存后 Memcached 分配策略的细节
【发布时间】:2013-12-25 18:12:51
【问题描述】:

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

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

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

添加新项目时也是如此 缓存,如果缓存已满,则 将寻找过期的物品 在更换最少之前更换 缓存中已使用的项目。缓存中已使用的项目。

问题是,当它替换“最少使用的项目”时究竟会发生什么。它是简单地通过访问每个键来维护排名,还是跟踪一段时间内的访问?

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

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

有什么想法吗?

【问题讨论】:

    标签: memcached


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。当您说“不是一个精确的 LRU”时,您是否确认在所描述的场景中 B 很可能会被删除?当我阅读有关删除算法的常见问题解答时,我很感兴趣。例如,如果某个项目在短时间内被访问的次数多于其他任何项目,那么理论上它可以永远存在于缓存中而不会被再次访问。
    • 每个平板都有一个 LRU 列表(这就是在实践中寻找空间 O(1) 的原因)。在给定的时间段内,给定的项目不会超过一次移动到最近使用列表的开头(想象一下几个键每秒被敲打几十万次)。最终,如果需要特定尺寸的空间,则未使用的物品将自行解决。
    猜你喜欢
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 2023-03-20
    相关资源
    最近更新 更多