当在memcache中可用内存已满时,memcache使用LRU(最近最近使用的)算法来释放内存.我的问题是LRU算法是否会删除在过期的项目中使用了一段时间(最近一次使用)的条目?到期的条目不会在该确切时刻删除,而是在下次有人尝试访问时(AFAIR).那么LRU算法(也)会解释密钥的到期吗?
小智 36
要了解memcached如何处理LRU,您必须更深入地了解memcached如何存储项目.根据物品的大小存储物品,只需将所有物品(即100k)存放在同一块板中,而将200k的其他物品存放在不同的板块中.
当内存变满并且您尝试存储100k项目时,memcached将在该板上应用LRU.如果在200k板中有键过期或未使用,它们将保留在那里,而如果100k板只有热键,则基于该算法的其中一个将被驱逐.
回到你的问题,当内存已满并且你试图存储一个项目时,memcached将首先查找你试图写入的slab中的过期项目,然后查找最少使用的项目.所以是的,它确实考虑了密钥的到期,或者更好的是,过期的密钥在LRU之前首先出现.
此外,当您尝试获取超过其到期日期的项目时,该项目将被逐出并回收内存.
更多详细信息(关于memcached内存分配的谷歌上的许多内容也解释了LRU,所以有很多内容可以阅读):
http://returnfoo.com/2012/02/memcached-memory-allocation-and-optimization-2/
http://www.adayinthelifeof.nl/2011/02/06/memcache-internals/
这是一个非常好的工具,我建议每个memcached主题:
http://code.google.com/p/phpmemcacheadmin/
希望能帮助到你!