Redis過期鍵刪除策略及淘汰策略

2022-08-28 11:06:17 字數 1306 閱讀 4121

redis的所有鍵都可以設定過期策略,redis的每個設定了過期時間的key都會被放在乙個獨立的字典中,用於遍歷刪除。

1.先區分兩個概念,被動刪除與主動刪除

1)被動刪除:key再被操作時,redis主動檢查key是否過期,過期則刪除;

優劣:對cpu友好,只有cpu在被操作時刪除,不浪費cpu時間;對記憶體不友好,如果同時大量key過期,這些key在被使用前不會被刪除造成資源浪費;

2)主動刪除:redis會定期隨機掃瞄一批設定了過期時間的key並進行刪除處理;當已用記憶體超過最大記憶體maxmemory時也會觸發主動清除策略;

redis採用主動刪除+被動刪除的過期策略。

2.過期鍵的刪除策略

優點:對記憶體友好,可以保證過期鍵被盡可能快的刪除釋放過期鍵占用的記憶體空間;

2)惰性刪除:放任鍵過期不管,直到獲取鍵時採取檢查鍵是否過期(有點像樂觀鎖你提交修改時才做衝突檢查,扯遠了),過期的話就刪除該鍵,不過期就返回鍵;惰性刪除可以歸類為被動刪除策略;

優劣:對cpu友好,取鍵時才過期檢查;對記憶體不友好庫中可能存在大量沒被訪問到的過期鍵,它們可能永遠不會被刪除;

3)定期刪除:每隔一段時間,對庫進行一次檢查刪除過期鍵。刪除多少及檢查多少庫由演算法決定;定期刪除是(定時刪除及惰性刪除)的一種折中,他會通過限制操作執行時長及頻率來減少刪除操作對cpu執行時間影響,而確定刪除策略的時長和頻率就是主要難點;定期刪除也是一種主動刪除策略;

難點:刪除太頻繁執行時長過長,定期刪除就會退化成定時刪除策略;刪除執行過少或執行時長過短,定期刪除又會和惰性刪除一樣;

redis實際使用的是惰性刪除+定期刪除的配合使用;

當redis的記憶體使用達到設定的記憶體上限,觸發記憶體淘汰機制,根據淘汰規則釋放記憶體:

1.volatile-lru:使用lru演算法(least recently used,最近最久未使用),從已設定過期時間的資料集中挑選最近最少使用的淘汰;

2.volatile-ttl:從已設定過期時間的資料集中挑選將要過期的資料淘汰;

3.volatile-random:從已設定過期時間的資料集中任意選擇資料淘汰;

4.allkeys-lru:使用lru演算法,從資料集中選擇最近最少使用的淘汰;

5.allkeys-random:從資料集中選擇任意資料淘汰;

6.noenviction(驅逐):禁止淘汰資料;當記憶體不足以寫入新資料時,直接報異常,redis只響應讀操作;

記憶體淘汰機制預設設定是noeviction;

# maxmemory-policy noeviction

Redis 過期刪除鍵策略和記憶體淘汰機制

expire key seconds 將key的生存時間設定為ttl秒 pexpire key milliseconds 將key的生成時間設定為ttl毫秒 expireat key timestamp s 將key的過期時間設定為timestamp所代表的的秒數的時間戳 pexpireat key...

Redis 過期鍵刪除策略

當redis伺服器中的資料庫鍵超過過期時間,刪除策略主要為三種 惰性刪除 放任鍵過期不管,但是每次從鍵空間中獲取鍵時,都檢查取得的鍵是否過期,過期的話,刪除該鍵 如果沒有過期,就返回該鍵。定期刪除 每隔一段時間,程式就對資料庫進行一次檢查,刪除裡面的過期鍵。至於要刪除多少過期鍵,以及要檢查多少個資料...

redis過期鍵刪除策略

redis伺服器實際使用的過期鍵刪除策略有兩種 通過配合使用這兩種刪除策略,伺服器可以很好地合理使用cpu時間和避免浪費記憶體空間之間取得平衡。redis 缺省會每秒進行十次過期掃瞄,過期掃瞄不會遍歷過期字典中所有的 key,而是採用了一種簡單的貪心策略。從過期字典中隨機 20 個 key 刪除這 ...