1. 程式人生 > >Redis物件型別與過期鍵刪除策略

Redis物件型別與過期鍵刪除策略

Redis物件型別:

string(int、embstr、raw):

儲存字串值長度小於 32 位元組的時候,採用 embstr 編碼儲存,如果大於32     用raw編碼儲存,或者當字串修改時,無論是否大於32位元組,都將改用raw編碼儲存。

list(ziplist、linkedlist):

當列表物件儲存的所有字串元素的長度都小於64位元組或者列表物件儲存的元素數量小於512個,則使用ziplist;不能滿足這兩個條件會使用linkedlist。

hash(ziplist、hashtable):

雜湊物件儲存的所有鍵值對的鍵和值的字串changdu 都小於64位元組或者雜湊物件儲存的鍵值對的數量小於512個,則使用ziplist;不能滿足則使用hashtable。

set(intset、hashtable):

集合物件儲存的所有元素都是整數值或者集合物件儲存的元素數量不超過512 ,則使用intset;否則會使用hashtable編碼。

sortset(ziplist、skiplist):

有序集合儲存的元素數量小於128個或者有序集合儲存的所有元素成員的長度都小於64位元組,使用ziplist,否則使用skiplist。

Redis過期鍵刪除策略:

RDB

生成RDB檔案:在執行SAVE或者BGSAVE命令建立一個新的RDB檔案時,程式會對資料庫中的鍵進行檢查,過期的鍵不會被儲存到新建立的RDB檔案中。

載入RDB檔案:如果伺服器以主伺服器模式執行,那麼在載入RDB檔案時,程式會對檔案中儲存的鍵進行檢查,未過期的鍵會被載入,過期的鍵會被忽略。如果以從伺服器模型執行,那麼在載入RDB檔案時,檔案中儲存的所有鍵,不論是否過期,都會被載入到資料庫中。不過因為主從伺服器進行資料同步的時候,從伺服器的資料會被清空,所以一般來講過期鍵對載入RDB檔案的從伺服器也不會造成影響。

AOF

AOF檔案寫入:當伺服器以AOF持久化模式執行時,如果資料庫中的某個鍵已經過期,但它還沒有被惰性刪除或者定期刪除,那麼AOF檔案不會因為這個過期鍵產生影響。當過期鍵被惰性刪除或者定期刪除之後,程式會向AOF檔案追加一天DEL命令,來顯示記錄該鍵已被刪除。

AOF重寫:和生成RDB檔案時相似,在執行AOF重寫的過程中,程式會對資料庫中的鍵進行檢查,已過期的鍵不會被儲存到重寫後的AOF檔案中。

複製

當伺服器在複製模式下時,從伺服器的過期鍵刪除動作由主伺服器控制:

1. 主伺服器在刪除一個過期鍵後,會顯示地向所有從伺服器傳送一個DEL命令,告知從伺服器刪除這個過期鍵。

2. 從伺服器在執行客戶端傳送的讀命令時,即使碰到過期鍵也不會將過期鍵刪除,而是繼續像處理未過期的鍵一樣來處理過期鍵。

3. 從伺服器只有在接到主伺服器傳送來的DEL命令後,才會刪除過期鍵。

由主伺服器來控制從伺服器統一的刪除過期鍵,可以保證主從伺服器的資料一致性,也正是因為這個原因,當一個過期鍵仍然存在於主伺服器的資料庫時,這個過期鍵在從伺服器裡的複製品也會繼續存在。