当在内存缓存的可用内存已满,内存缓存使用LRU(最后最近使用)算法来释放内存。 我的问题是将LRU算法,而删除没有被用于一些时间条目(最近一次使用),比过期的项目? 那些即将到期的项不会被删除对确切的时间,但下一次有人试图在访问它(AFAIR)。 所以将LRU算法(也)占密钥到期?
Answer 1:
要了解的memcached如何做LRU你必须去更深入和了解如何存储memcached的项目。 项存储取决于它们的大小,只需把你所有的物品是可以说100K得到存储在相同的平板,而在200K等物品存放在不同的平板。
当存储空间已满,并尝试存储10万项,memcached的将适用于板坯LRU。 如果有钥匙过期,或者没有在200K板使用,它们仍然存在,而如果100K板只有热键,基于算法的那些人会被驱逐。
回到你的问题,当内存已满并尝试存储项目,分布式缓存先来看看在你试图写,然后寻找至少使用过的物品板坯过期的项目。 所以,是的,它确实考虑到按键期满,或者更好的是,过期的键先去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/
希望能帮助到你!
Answer 2:
从我知道这种说法是不正确的。
“回到你的问题,当内存已满并尝试存储项目,分布式缓存先来看看在你试图写,然后寻找至少使用过的物品板坯过期的项目。所以,是的,它确实考虑到占按键期满,或者更好的是,过期的键先去LRU之前。”
内存缓存将根据LRU驱逐项(如果有任何过期的项目,只要他们比另一个关键最近使用也没关系(即使有效))。
经测试前一阵子在内存缓存1.4.4。