本文已收錄于專欄
《Redis精通系列》
上千人點贊收藏,全套Redis學習資料,大廠必備技能!
目錄
1、簡介
2、過期策略
2.1 主動洗掉
2.2 被動洗掉
3、如何正確的設定key的過期時間
4、從節點存在的問題
1、簡介
Redis的資料結構均可以通過EXPIRE key seconds 的方式設定key的過期時間(TTL),我們也習慣的認為Redis的key過期時間到了,就會自動洗掉,顯然這種想法并不正確,Redis的設計考慮到性能/記憶體等綜合因素,設計了一套過期策略,
2、過期策略
Redis key過期洗掉有兩種方式
- 主動洗掉
- 被動洗掉
2.1 主動洗掉
當key被訪問的時候,先校驗key是否過期,如果過期了則主動洗掉,
2.2 被動洗掉
Redis服務器定時隨機的測驗key的過期時間,如果過期了則被動洗掉,被動洗掉的存在必不可少,因為存在一些過期且永久不在訪問的key,如果都依賴主動洗掉,那么它們將會永久占用記憶體,
Redis為了保證提供高性能服務,被動洗掉過期的key,采用了貪心策略/概率演算法,默認每隔10秒掃描一次,具體策略如下:
- 從過期字典(設定了過期時間的key的集合)中隨機選擇20個key,檢查其是否過期
- 洗掉其中已經過期的key
- 如果洗掉的過期key數量大于25%,則重復步驟1
3、如何正確的設定key的過期時間
開發在設計Redis快取架構時,一定要注意要盡可能的避免(禁止)將大量的key設定為同一過期時間,因為結合2.2被動洗掉可知,Redis被動洗掉過期key時,會導致服務短暫的不可用;如果存在大量key同時過期,這會導致被動洗掉key的三個步驟回圈多次,從而導致Redis服務出現卡頓情況,這種情況在大型流量專案是無法接收的,
因此為了避免這種情況出現,一定要將一些允許過期時間不需要非常精確的key,設定較為隨機的過期時間,這樣就可以將卡頓時間縮小,
4、從節點存在的問題
在主從模式下,Redis是AP架構,它具有高可用性,但是無法保證主從節點的強一致性,在Redis主從架構中,從節點不會直接發生資料的寫入,過期key洗掉也不會在從節點直接發生,它只能被動地依靠主從同步來完成這一步驟,
當主節點中key到期時,會在AOF檔案中增加DEL指令,在這個指令未同步到從節點這段時間內,從節點中的key仍然是未洗掉的,只有當指令同步過來之后,從節點才會洗掉這個key,通常情況下,這并不帶來什么太大的問題,但是確實存在主從資料不一致的情況,
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/301106.html
標籤:其他
