【问题标题】:Lazy Expiration in MemcachedMemcached 中的延迟过期
【发布时间】:2011-11-29 14:58:33
【问题描述】:

我读到了这个 - How does the lazy expiration mechanism in memcached operate?

所以我有一个问题。 是否可以/建议自己制作一个程序,定期检查 memcached 中的所有项目,为每个项目发送 GET 请求,以便删除过期的项目?

我想要这个的原因是因为我想对 Memcached 中的使用百分比进行适当的控制。如果该百分比接近 100%,我将永远无法确定是否应该添加更多内存,或者我是否不应该担心,因为有很多过期的项目。

我使用 PHP,不幸的是这并没有返回 memcached 中的所有项目(不知道为什么):

    $allSlabs = $memcache->getExtendedStats('slabs');
    foreach ($allSlabs as $server => $slabs) {
        foreach ($slabs as $slabId => $slabMeta) {
            $cdump = $memcache->getExtendedStats('cachedump', (int)$slabId);
            foreach ($cdump as $keys => $arrVal) {
                foreach ($arrVal as $key => $v) {
                    echo $key, "\n";
                }
            }
        }
    }

【问题讨论】:

  • 我不确定,但我认为“使用百分比”只检查未过期的项目。我很确定我的缓存从未接近 100%,但如果过期项目将计入使用统计,它只会变得更大。但事实并非如此。百分比波动(上升下降)。我认为根本不需要主动清除吗? LRU 只有在 替换过期项目后才有意义。
  • 那太好了!我会测试自己,为一些 MB 添加一些垃圾,看看过期日期后 % 是否仍然很高。谢谢。
  • 到目前为止还没有减少。它应该在10分钟后减少。但我知道你在说什么,因为我也看到它在波动,但可能需要一些时间。

标签: memcached


【解决方案1】:

您应该只使用驱逐率来查看是否需要添加更多内存。如果 memcached 不得不丢弃一个对象以便为存储下一个腾出空间,则驱逐统计数据将增加。 (您可以查看“reclaimed”统计数据,了解我们可以为某个项目回收内存以存储新项目的次数。

您建议的代码会不时地转储其内容,从而阻塞服务器。

【讨论】:

  • 似乎我的服务器没有显示“回收”状态。我知道驱逐。我现在有“0”(这很好),但我的想法是完全避免这些。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
相关资源
最近更新 更多