2011-10-03 39 views
2

我看过这个 - How does the lazy expiration mechanism in memcached operate?Memcached中的延迟过期

所以我有一个问题。 是否有可能/建议自己制作一个程序,定期检查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

我不确定,但我认为“已使用百分比”仅检查未过期的项目,我很确定我的缓存从未接近100%,但如果过期的项目将计入使用-stats,它应该只会变大,而不会,百分比波动(增加_和减少)。我认为主动清除根本不是必需的吗?LRU只会使用_after_替换过期的项目有意义 – Nanne

+0

会很好!我会测试自己,为某些MB添加一些垃圾,并且看看截止日期之后%是否仍然很高,谢谢。 – Nuno

+0

到目前为止它还没有减少。它应该在10分钟后减少。但我知道你在说什么,因为我看到它也在波动,但可能需要一段时间。 – Nuno

回答

2

你应该只使用驱逐率,看看是否需要添加更多的内存。如果memcached不得不抛出一个对象以腾出空间存储下一个对象,那么驱逐统计数据将会增加。 (您可以查看“回收”状态以查看我们可以回收内存以存储新项目的内存的次数。

您建议的代码会通过立即丢弃其内容来阻塞服务器然后

+1

似乎我的服务器不显示“回收”属性。我知道驱逐。我此时有“0”(这很好),但我的想法是避免这些。感谢您的帮助! – Nuno