redis 過期策略都有哪些,有事怎樣刪除的 ?
過期刪除策略:
定時刪除
優點:對記憶體最友好的。可以及時釋放鍵所占用的記憶體。
缺點:對 cpu 不友好。特別在過期鍵比較多的情況下,刪除過期鍵會占用相當一部分 cpu 時
間。同時在記憶體不緊張,cpu緊張的情況下,將 cpu 用在刪除和當前任務不想關的過期鍵上,無疑會對伺服器響應時間和吞吐量造成影響。
惰性刪除
放任鍵過期不管,但是每次從鍵空間中讀寫鍵時,都會檢查取得的鍵是否過期。如果過期就刪除該刪,否則就返回該鍵。(ps:鍵空間是乙個儲存了資料庫所有鍵值對的資料結構)
優點:對 cpu 最友好。只有在操作的時候進行過期檢查,刪除的目標僅限於當前需要處理的鍵,不會在刪除其他無關本次操作的過期鍵上花費任何 cpu 時間。
缺點:對記憶體不友好。這個十分容易理解了,鍵過期了,但因為一直沒有被訪問到,所以一直保留著(除非手動執行 flushdb 操來於清空當前資料庫中的所有 key。),相當於記憶體洩漏。
定期刪除
每隔一段時間,程式就對資料庫進行檢查,刪除裡面的過期鍵。至於要刪除多少過期鍵,以及檢查多少資料庫,則有演算法決定。
該策略是上述兩種策略的折中方案,需要通過實際情況,來設定刪除操作的執行時長和頻率。
明白了過期鍵的刪除策略後,那 redis 伺服器又是採用什麼策略來刪除過期鍵的呢?
實際上,redis 伺服器使用的是惰性刪除和定期刪除兩種策略,通過配合使用,伺服器可以很好的平衡 cpu 和記憶體。
其中惰性刪除為 redis 伺服器內建策略。而定期刪除可以通過以下兩種方式設定: 1. 配置 redis.conf 的 hz 選項,預設為10 (即 1 秒執行 10 次,值越大說明重新整理頻率越快,對 redis 效能損耗也越大) 2. 配置 redis.conf 的 maxmemory 最大值,當已用記憶體超過 maxmemory 限定時,就會觸發主動清理策略
淘汰策略
1.noeviction:返回錯誤當記憶體限制達到,並且客戶端嘗試執行會讓更多記憶體被使用的命令。
2.allkeys-lru: 嘗試**最少使用的鍵( lru),使得新新增的資料有空間存放。
3.volatile-lru: 嘗試**最少使用的鍵( lru),但僅限於在過期集合的鍵,使得新新增的資料有空間存
放。4.allkeys-random: **隨機的鍵使得新新增的資料有空間存放。
5.volatile-random: **隨機的鍵使得新新增的資料有空間存放,但僅限於在過期集合的鍵。
6.volatile-ttl: **在過期集合的鍵,並且優先**存活時間( ttl)較短的鍵,使得新新增的資料有空間
存放。
Redis 過期策略 和 淘汰策略
適用於 很多的 key 可能會到了過期時間還沒有進行刪除的情況。放任 key 過期不管,但是每次從鍵空間中獲取 key 時,都檢查取得的 key 是否過期,如果過期的話,就刪除該 key 如果沒有過期,就返回該 key 每隔一段時間程式就對資料庫進行一次檢查,刪除裡面的過期的 key 至於要刪除多少...
Redis的 過期策略 和 淘汰策略
惰性過期 被動淘汰 定期過期 redis 中同時使用了惰性過期和定期過期兩種過期策略 redis中定期過期策略演算法大致實現 redis.config中hz定義了servercron任務的執行週期,預設為10,即cpu空閒時每秒執行10次 每次過期key清理的時間不超過cpu時間的25 即若hz 1...
Redis的過期策略和記憶體淘汰策略
redis的過期策略 我們都知道,redis是key value資料庫,我們可以設定redis中快取的key的過期時間。redis的過期策略就是指當redis中快取的key過期了,redis如何處理。過期策略通常有以下三種 定時過期 每個設定過期時間的key都需要建立乙個定時器,到過期時間就會立即清...