memcached过期删除
Lazy Expiration(延迟过期)
Memcached不会监控记录是否过期,而是在外部来获取数据的时候,才检查记录的时间戳,因此称为Lazy Expiration。
LRU(Least Recently Used 最近最少使用)
当空间不足的时候,Memcached会优先使用已经过期的数据空间,如果还不够,那么就会把最近最少使用的对象的空间释放出来使用。
懒惰删除机制
删除item对象时,不释放内存,作删除标记,指针放入slot回收插槽,下次分配的时候直接使用
当某个值过期后,并没有从内存删除,因此,stats 统计时,curr_item 有其信息,当某个新值去占用它的位置时,当成空 chunk 来占用,当 get 值时,判断是否过期,如果过期,返回空并且清空,curr_item 就减少了.
这个过期,只是让用户看不到这个数据而已,并没有在过期的瞬间立即从内存删除,这个称为 lazy expiration,惰性失效,这样做的好处是节省了 cpu 时间和检测的成本
删除机制
memcached使用的是lru(least recently used 最近最少使用)删除机制
原理
当某个单元被请求时,维护一个计数器,通过计数器来判断最近谁最少被使用,就把谁踢出
即使某个 key 是设置的永久有效期,也一样会被踢出来,称为永久数据被踢现象