【发布时间】: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