為什麼redis單執行緒模型會效率高
一:redis中資料為什麼會丟失?
redis是緩衝用的並不是資料庫,快取的資料會過期的,另外也可能是被設定了過期時間,redis自己給幹掉了
二:資料都過期了為什麼還佔這記憶體呢?
如:在redis中設定了過期時間,到期之後我們查資料會出現查不到資料但是還佔記憶體的情況。
其實它內部是 定期刪除和惰性刪除兩個在起作用。
定期刪除指:redis每隔100ms隨機抽取一些key來檢查和刪除。如果全部檢查cpu消耗會很多,可能會宕機。
惰性刪除:定期刪除中過期的key沒有被刪除的,當某個key被使用的時候redis會檢查一下是否過期,如果過期了則不會返回任何東西。
三:如果定期刪除沒刪除的惰性刪除也沒檢查到的過期資料怎麼辦呢?
走記憶體淘汰機制
四:redis記憶體淘汰機制
如果redis的記憶體佔用過多的時候,此時會進行記憶體淘汰,有如下一些策略:
redis 10個key,現在已經滿了,redis需要刪除掉5個key
1個key,最近1分鐘被查詢了100次
1個key,最近10分鐘被查詢了50次
1個key,最近1個小時倍查詢了1次
2)allkeys-lru:當記憶體不足以容納新寫入資料時,在鍵空間中,移除最近最少使用的key(這個是最常用的)
3)allkeys-random:當記憶體不足以容納新寫入資料時,在鍵空間中,隨機移除某個key,這個一般沒人用吧,為啥要隨機,肯定是把最近最少使用的key給幹掉啊
4)volatile-lru:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,移除最近最少使用的key(這個一般不太合適)
5)volatile-random:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,隨機移除某個key
6)volatile-ttl:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,有更早過期時間的key優先移除
其實,你寫的資料太多,記憶體滿了,或者觸發了什麼條件,redis lru,自動給你清理掉了一些最近很少使用的資料