內(nèi)存回收體現(xiàn)在兩個(gè)方面
1:對(duì)過期key的回收:
?? 分為兩種結(jié)合:定期刪除+惰性刪除
???? 定期好理解,默認(rèn)100s就隨機(jī)抽一些設(shè)置了過期時(shí)間的key,去檢查是否過期,過期了就刪了。
惰性刪除,見名知意,惰性嘛,我不主動(dòng)刪,我懶,我等你來查詢了我看看你過期沒,過期就刪了還不給你返回,沒過期該怎么樣就怎么樣。
存在問題:有些key一直沒有被隨機(jī)掃到,也沒有再訪問過,通過上面的當(dāng)時(shí)就無法回收,這時(shí)候需要內(nèi)存淘汰機(jī)制
????
2:內(nèi)存達(dá)到上限后出發(fā)內(nèi)存溢出控制策略
1)noeviction:默認(rèn)策略,不會(huì)刪除任何數(shù)據(jù),拒絕所有寫入操作并返
回客戶端錯(cuò)誤信息(error)OOM command not allowed when used memory,此
時(shí)Redis只響應(yīng)讀操作。
2)volatile-lru:根據(jù)LRU算法刪除設(shè)置了超時(shí)屬性(expire)的鍵,直
到騰出足夠空間為止。如果沒有可刪除的鍵對(duì)象,回退到noeviction策略。
3)allkeys-lru:根據(jù)LRU算法刪除鍵,不管數(shù)據(jù)有沒有設(shè)置超時(shí)屬性,
直到騰出足夠空間為止。
4)allkeys-random:隨機(jī)刪除所有鍵,直到騰出足夠空間為止。
5)volatile-random:隨機(jī)刪除過期鍵,直到騰出足夠空間為止。
6)volatile-ttl:根據(jù)鍵值對(duì)象的ttl屬性,刪除最近將要過期數(shù)據(jù)。如果
沒有,回退到noeviction策略。
如果沒有鍵滿足回收的前提條件的話,策略volatile-lru,?volatile-random以及volatile-ttl就和noeviction 差不多了。