什么导致memcache删除密钥?

我们的memcache安装最近开始删除键,我们不知道为什么。 大批的钥匙在同一时间消失。

Memcache报告说,驱逐很less到不存在,我们的应用程序无法清除内存caching(它只能删除特定的键)。 即使应用程序没有知识的键被删除,所以我们相信他们正在过期。 但是,我们的memcacheconfiguration在一段时间内还没有被触及。

有没有人debugging过这样的问题,如果是的话,有没有什么步骤,你会build议我们采取? memcache的过期策略有多灵活 – 我们是否可能突然遇到基于(比如说)写密钥的标准?

即使你已经在Memcached中设置了密钥不过期,如果Memcached填满了,logging也会按照最近最less使用的方式被删除。 标准的基于平板的存储机制以固定大小的块存储logging,这些块是从1Mb大小的块中分配的。 虽然速度很快,但也意味着Memcached最终会浪费很多内存。 一旦一块板被分配来保存特定大小的块,我不认为块可以resize。 如果caching大小对象的组合,并且组合随着时间的推移而变化,则memcached最终可能会将小对象存储在更大的块中(如果这些块是唯一可用的块)。

这是诸如gear6(www.gear6.com)和northscale(www.northscale.com)等公司在其Memcached发行版中解决的问题之一。

原来,这是由于在部署时,应用程序中留下了一些debugging代码。

debugging代码手动调用Memcache :: flush。

我认为这个故事的寓意是:“任何时候你说,'它不可能是应用',你可能是错的。 当我问这个问题的时候,你会认为我会知道,但显然,我可以不时地提醒。