我读了这篇文章 - 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";
}
}
}
}
答案 0 :(得分:2)
您应该使用逐出率来查看是否需要添加更多内存。如果memcached必须抛出一个对象以便为存储下一个对象腾出空间,那么驱逐统计数据将会增加。 (并且您可以查看“回收”统计数据,以查看我们可以回收物品存储新物品的内存的次数。
您建议的代码会不时地转储其内容,从而阻塞服务器。