Memcached的过期数据删除机制
1.当某个值过期后,并没有从内存删除,因此,使用stats命令统计时,curr_item参数有信息(不为0)
2.当某个新值去占用他的位置时,当成空chunk来占用(即取代了原来数据占用内存的位置)
3.当get值时,判断是否过期,如果过期,返回空,并且清空,curr_item就减少
这个过程,只是让用户看不到这个数据而已,并没有在过期的瞬间立即从内存删除,这个称为lazy expriation(懒性失效)
好处:节省了CPU时间和检测的成本
永久数据被T
1.如果slab里的很多chunk,已经过期,但过期后没有被get过,系统不知他们已经过期.
2.永久数据很久没get了,不活跃,如果新增item,则永久数据被踢.
3.当然,如果哪些非永久数据被get,也会被标识expire,从而不会再踢掉永久数据.
解决方案:
永久数据和非永久数据分开放