內存淘汰策略主要採用了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