您現在的位置是:首頁 > 美食首頁美食

生存還是毀滅,Redis會怎麼辦!Redis鍵的過期刪除策略

由 摩詰無花 發表于 美食2023-01-22
簡介當Redis伺服器處於複製模式時對過期鍵的處理:主伺服器刪除key是,會向從伺服器傳送DEL命令從伺服器不會處理過期key從伺服器只有接到Master傳送的DEL命令才會刪除key總結Redis的可以過期策略採用惰性刪除和定期刪除兩種組合方

椰漿過期了怎麼辦

生存還是毀滅,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次。

生存還是毀滅,Redis會怎麼辦!Redis鍵的過期刪除策略

這個值可以設定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的可以過期策略採用惰性

刪除和定期刪除兩種組合方式,其中惰性刪除保證過期鍵一點過不會被使用,定期刪除可以保證過期資料得到釋放,最佳化資源佔用率。