redis中關於到期鍵的刪除策略,redis到期鍵策略
我們已經瞭解到了Redis是一種記憶體資料庫,Redis中資料都是以key-value的形式儲存在記憶體中,由Redis伺服器來維護和管理這部分記憶體,記憶體是何足珍貴,不需要的資料或者是已經使用過的沒用的資料是不會讓它長久的存在於記憶體中的,畢竟我們還是要建設節約型社會的。所以我們可以通過給鍵設定存留時間或者到期時間來權衡有限的記憶體和不斷增長的資料,設定到期時間的命令為:【expire key 時間長度(秒)】或者是【pexpire key 時間長度(毫秒)】 同時也可以通過【expireat key 時間點(Unix時間戳記)】,可以通過TTL命令或者是pttl命令查看這個鍵還有多少剩餘時間。
資料庫中鍵的到期時間是儲存在一個字典中的,這在Redis_字典中提到過了,本文主要說明的問題是到期鍵刪除的問題,一個到期的鍵肯定不會讓它長久的再存在於記憶體中,肯定是要對它進行刪除的,建設節約型社會嘛,那麼什麼時候刪除它呢?這裡有三種不同的刪除策略,我們逐一簡單說明,很容易理解。
1,定時刪除
什麼是定時刪除?顧名思義,就是我定個時間,到點就刪除,有什麼好處呢,對記憶體是最友好的,可以保證到期鍵會被儘快的刪除掉,記憶體被儘早的釋放出來,但是硬幣都有兩面啊,記憶體友好了,CUP時間呢,到點就刪除到點就刪除,CUP不幹別的事了,光做刪除到期鍵操作了,不現實,並且伺服器還要建立大量的定時器,來實現定時刪除,如果記憶體現在並不缺少,有閒置記憶體,而這個時候有大量的命令請求在等待伺服器處理,那麼伺服器也應該優先把CUP時間給處理用戶端請求上,而不是刪除到期鍵上。
所以定時刪除不是一個完美的策略。
2,懶惰刪除
同樣,什麼是懶惰刪除,懶惰,懶得做刪除操作,逼不得已我是不會去刪除到期鍵的,懶到家了。
那麼什麼時候是逼不得已的時候呢,用戶端現在取這個資料了,這個key已經到期了,明顯不能返回給用戶端,這個時候也就是懶到家的時候了,不刪不行啊,用戶端那邊不願意啊,可以看出,這個策略對記憶體是極不好的,沒有建設節約型社會,但是CUP時間是最友好的,不會輕易動用CUP時間去刪除到期鍵。
3,定期刪除
定期?比定時時間長一點,不會時刻的去檢查到期鍵,刪除到期鍵,定期刪除,是每隔一段時間檢查一次資料庫,刪除裡面的到期鍵,很明顯定期刪除是定時刪除和懶惰刪除的一個折中。
那麼Redis中採用什麼到期刪除策略呢?
Redis時間上採用了惰性刪除和定期刪除兩種策略配合使用,可以更好的使CUP時間和記憶體區的平衡
本文討論Redis的到期鍵刪除策略就不能不提AOF和RDB兩種備份策略對到期鍵的處理
首先說一下RDB
我們知道伺服器啟動的時候如果開啟了RDB功能,伺服器會對RDB檔案進行載入
這裡分兩種情況
1,主伺服器模式,會被檔案中的鍵進行檢查,到期的鍵忽略,所以到期鍵對主伺服器不會造成影響,
2,從伺服器模式,無論到期不到期全部載入資料庫中,不過主伺服器在進行資料同步的時候,從伺服器的資料會被清空,所以一般來說,對從伺服器來說也不會造成影響
然後是AOF
記住一點,在執行AOF重寫的時候,到期鍵不會被儲存到重寫後的AOF檔案中,所以到期鍵不會對AOF造成影響。
還有就是主從複製的時候
主刪除一個到期鍵,會顯示的告訴從
從在執行用戶端發送的讀命令時,即使是到期鍵也不會刪除到期鍵,而是像處理未到期鍵一樣處理,從只有介紹到主的Del命令才會刪除
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。