redis筆記之過期策略

2021-10-12 03:06:34 字數 840 閱讀 7669

redis是乙個記憶體型資料庫,可以減少資料讀寫給磁碟帶來的壓力。

資料否存在與記憶體,肯定會涉及到記憶體滿的問題。

記憶體滿了,要如何處理呢?

redis設定key時,可以設定乙個過期時間,那過期了的,可以進行乙個刪除,那它是如何刪除的呢?那沒設定時間的資料,或者過期很長的,那是不是還是會滿的,那要怎麼辦呢?

設定了過期時間,只有訪問的時候,才會進行乙個判斷資料過期。此策略可以節省cpu資源,但是對記憶體不太友好,不實時過期,該過期刪除的一直堆積在記憶體裡。

底層實現是呼叫方法,db.c檔案下

expireifneeded

(redisdb *db, robj *key)

每隔一定的時間,會掃瞄一定的數量的資料庫的expire自帶呢中一定數量的key,並清除其中已經過期的key。

原始碼expire.c檔案下

activeexpirecycle

(int type)

redis定期呼叫servercron定期去進行過期掃瞄,多久執行1次,在redis.conf中通過hz配置,hz 為10,說明1秒執行10次,相當於100毫秒進行執行一次。

進行過期掃瞄也不會進行全部掃瞄,採用了一定的方法。

怎麼找呢,是為了尋找設定了過期時間的,過期的資料,進行掃瞄清除。

是按hash桶唯獨進行取值,取到20個為止,如果乙個桶裡有25個資料,那麼會取25個;如果一直取不到20個,那就最多取400個桶。

拿出來的資料過期比例超過10% ,或者沒有刪除過期key,則需要重新取值掃瞄。每迴圈16次會檢測時間,超時會跳出。

redis中同時使用了惰性過期和定期過期 兩種過期策略。

Redis之過期策略 資料淘汰機制

過期策略指的是ttl到期時的處理策略,淘汰策略指的是記憶體滿了的情況下的策略 redis可以對key設定過期時間,這是乙個非常實用的功能,那redis是如何實現這個機制的呢?答案就是 定期刪除 惰性刪除 結合定期刪除 惰性刪除redis 實現了key的過期時間機制,但還是會有一些key會沒有被定期刪...

redis過期策略

1 noeviction 一旦記憶體滿則返回錯誤 2 allkeys lru 對所有的key進行lru 3 volatile lru 只對設定了過期的key進行lru 預設的方式 4 allkeys random 隨機剔除乙個key 5 volatile random 對設定過期的key進行隨機剔除...

Redis過期策略

1,設定過期時間 expire key time 單位為秒 setex string key,int seconds,string value 字串獨有的方式 注意 過期key的判定 檢查給定key是否存在於過期字典,如果存在,那麼取得key的過期時間。檢查當前unix時間戳是否大於key的過期時間...