内存淘汰策略主要采用了6种方式进行内存对象的释放操做html
1.volatile-lru:从设置了过时时间的数据集中,选择最近最久未使用的数据释放java
2.allkeys-lru:从数据集中(包括设置过时时间以及未设置过时时间的数据集中),选择最近最久未使用的数据释放redis
3.volatile-random:从设置了过时时间的数据集中,随机选择一个数据进行释放算法
4.allkeys-random:从数据集中(包括了设置过时时间以及未设置过时时间)随机选择一个数据进行入释放数据库
5.volatile-ttl:从设置了过时时间的数据集中,选择立刻就要过时的数据进行释放操做dom
6.noeviction:不删除任意数据(但redis还会根据引用计数器进行释放呦~),这时若是内存不够时,会直接返回错误性能
http://blog.csdn.net/zdy0_2004/article/details/44685615.net
redis只是每一个Object维护一个相对的时间,淘汰时,随机取3个或者更多的,找到最老的进行淘汰.这样节省了双链表的指针开销,读时还不用加锁.虽不能保证必定淘汰最老的,但倾向于淘汰偏老的对象, 通过咱们线上的实测:和标准的LRU对比,命中率的损失很是小, 效果不错。指针
http://blog.csdn.net/wallwind/article/details/44906613code
Redis的LRU算法不是一个严格的LRU实现。这意味着Redis不能选择最佳候选键来回收,也就是最久未被访问的那些键。相反,Redis 会尝试执行一个近似的LRU算法,经过采样一小部分键,而后在采样键中回收最适合(拥有最久访问时间)的那个。
然而,从Redis3.0开始,算法被改进为维护一个回收候选键池。这改善了算法的性能,使得更接近于真实的LRU算法的行为。Redis的LRU算法有一点很重要,你能够调整算法的精度,经过改变每次回收时检查的采样数量。
这个参数能够经过以下配置指令:
maxmemory-samples 5
Redis没有使用真实的LRU实现的缘由,是由于这会消耗更多的内存。然而,近似值对使用Redis的应用来讲基本上也是等价的。
http://blog.csdn.net/codetomylaw/article/details/50246255
惰性删除+按期删除
http://www.cnblogs.com/java-zhao/p/5205771.html
http://www.cnblogs.com/xuliangxing/p/7151812.html
redis 4.0引入LFU,要配置LFU模式,如下策略是可用的:
http://blog.csdn.net/iycynna_123/article/details/72628272
http://blog.csdn.net/qq_35440678/article/details/53453107