您現在的位置是:首頁 > 美食首頁美食
生存還是毀滅,Redis會怎麼辦!Redis鍵的過期刪除策略
椰漿過期了怎麼辦
他非常猶豫,思考著:
To be, or not to be,that is the question!
《哈姆雷特》中的經典名句。
但是思索片刻,又會覺得與《心經》中【色即是空,空即是色】有類似的含義。
當然扯遠了,本篇我們還是說說Redis鍵的生存時間和生存策略,毀滅策略。
1。前言
開端只是一個引文,不過有時候也值得大家去思考一番,下面進入正題。
下面分幾個部分講啦,先來回顧一下Redis鍵的生存時間,過期時間的設定;然後會講到過期鍵刪除策略,然後會聊其他功能對過期鍵的處理。
2。鍵的生存時間
鍵過期時間設定透過Expire命令或者Pexpire命令,客戶端可以以毫秒級的精度為資料庫中的某個鍵設定生存時間,一段時間後Redis伺服器會刪除生存時間為0的鍵。下面我們看一下Redis鍵的過期時間設定,以及查詢鍵剩餘壽命。
EXPIRE key 5 #設定一個鍵的過期時間 單位秒
EXPIREAT KEY 1660753861 #設定過期時間某個時間戳過期(UNIX時間戳)單位秒
PEXPIRE key 33 #設定一個鍵的過期時間 單位毫秒
PEXPIREAT key 1660839534000 #設定過期時間某個時間戳過期(UNIX時間戳)單位毫秒
TTL key # 返回鍵的剩餘過期時長,單位秒
PTTL key # 返回鍵的剩餘過期時長,單位毫秒
Redis中的這些鍵的過期時間如何儲存
Redis中維護了一個過期字典。其資料結構中,字典的鍵是一個指標,指向某個資料庫鍵,而字典的鍵值則是一個long型別的整數,表示一個毫秒精度的UNIX時間戳。
其實上面幾種設定鍵過期時間的命令相當於最後都是呼叫 PEXPIREAT 這個命令。
3。鍵的過期刪除策略
3。1 如何判定鍵過期
Redis中判斷鍵是否過期會使用以下的方法
檢查給定的鍵是否存在於過期字典,如果存在則獲取鍵的過期時間
檢查當前的UNIX時間戳是否大於鍵的過期時間戳,大於過期時間戳的話則判定鍵過期
3。2 三種過期鍵刪除策略
常見刪除策略有三種,定時刪除,惰性刪除,定期刪除
3。2。1定時刪除
定時刪除是在設定鍵的過期時間時,設定一個定時器,定時器會在鍵的過期時間到來時立即刪除鍵
優點: 記憶體友好,可以保證過期鍵儘可能快速地被刪除,釋放記憶體。
缺點: CPU資源分配不友好,如果過期鍵比較多的時候,此時刪除會佔用大量的CPU資源,從而間接影響Redis的效能。
3。2。2惰性刪除
惰性刪除只會在程式需要使用鍵時,才會對當前鍵進行過期檢查,而不會去刪除其他的過期鍵。
優點:CPU資源耗費小,因為只是在取出鍵的時候才會做過期檢查,並刪除等操作。
缺點: 過期鍵會佔用記憶體,如果一個過期鍵永遠不被使用,那麼就永遠不能被刪除,會造成記憶體洩漏。
惰性刪除執行步驟如下:
執行讀寫命令時去檢查鍵的過期時間
如果鍵過期,刪除鍵,整個流程會按照鍵不存在的情況處理
如果鍵未過期,則按照鍵存在的情況執行命令
3。2。3定期刪除
定期刪除是每隔一段時間執行一次過期鍵刪除操作,可以透過限制刪除的操作執行的時長和頻率來減少CPU資源佔用。同時定期刪除策略不會導致過期鍵過多的堆積,造成大量記憶體洩漏。
定期刪除策略有兩個點比較重要,執行時長和執行頻率。 需要兩者結合才能達到最優的效果。
定期刪除步驟:
從設定過期時間的key的集合中隨機檢查20個key
刪除其中的過期鍵。如果檢查結果中25%以上的key過期,則開始新一輪任務。
每次會按順序在每個資料庫執行,如果在3號資料庫返回,則會記錄下來,下次刪除操作執行的時候會從4號資料庫開始,就這樣迴圈遍歷整個Redis資料庫。
定期任務執行頻率:
為了定期檢測資源和服務狀態並根據預定策略執行相應的操作,Redis會呼叫內部函式來執行多種後臺任務。
其執行頻率由
hz
引數指定,預設為10,即每秒執行10次。
這個值可以設定1-500,但是官方建議設定100以下,設定過大會造成CPU資源佔用過大。基本上只用預設值就能滿足大部分需求。
4。其他功能對過期鍵的處理
Redis資料儲存有AOF和RDB兩種功能。對於過期鍵的處理也不相同。
RDB持久化對過期鍵的處理:
生成RDB檔案時。 過期key會被忽略,從而不會被儲存到RDB檔案中
載入RDB檔案。
主伺服器模式。 載入RDB檔案時,會對key的過期時間進行檢查,過期鍵會被忽略,不會載入到Redis中
從伺服器模式。所有資料key都會載入到Redis中
AOF持久化對過期鍵的處理:
AOF檔案寫入的時候,會append刪除語句, DEL key 。
AOF重寫的時候過期key則不會被寫入AOF檔案中。
當Redis伺服器處於複製模式時對過期鍵的處理:
主伺服器刪除key是,會向從伺服器傳送DEL命令
從伺服器不會處理過期key
從伺服器只有接到Master傳送的DEL命令才會刪除key
總結
Redis的可以過期策略採用惰性
刪除和定期刪除兩種組合方式,其中惰性刪除保證過期鍵一點過不會被使用,定期刪除可以保證過期資料得到釋放,最佳化資源佔用率。