處理redis過期資料

2022-06-25 12:36:13 字數 1588 閱讀 1974

可以採用三種方法:

定時刪除、定期刪除、惰性刪除

一、定時刪除

寫乙個定時器,將key的過期時間到達時,立刻將鍵刪除

優點:節約記憶體

缺點:增加cpu壓力,影響redis伺服器響應時間和吞吐量

二、定期刪除

activeexpirecycle()函式對每個expires(資料庫)逐一進行檢測

對每個資料庫檢測時,隨機挑選w個key檢測

1.如果key超時,刪除key

2.如果一輪中刪除key的數量》w*25%,迴圈該過程(繼續挑選w個key檢測)

3.如果一輪中刪除key的數量<=w*25%,檢查下乙個資料庫,一直這樣迴圈

4.w取值=active_expire_cycle_lookups_per_loop屬性值

引數current_db用於記錄activeexpirecyle()進入哪個資料庫執行,如果activeexpirecycle()執行時間到期,下次從current_db繼續向下執行

特點:隨機抽查、重點抽查

優點;檢測頻度可以自定義,記憶體占用不是很大

缺點:清理不徹底

三、惰性刪除

資料過期之後不處理,等下次查詢的時候在刪除

優點:cpu占用不大

缺點:記憶體占用很大,過期資料一直存在

四、資料逐出策略

執行所有命令的時候,都會檢測記憶體是否充足

不滿足最低儲存要求的時候,就會清理資料,清理資料的演算法叫逐出演算法

如果逐出演算法不能清理出足夠的空間就會反覆執行。當依然無法清理出空間的時候就會報錯:

(error)oom command not allowed when used memory>'maxmemory'

設定最大可使用記憶體     

maxmemory #占用物理記憶體的比例,預設值為0,表示不限制。生產環境中根據需求設定,通常設定在50%以上。

每次隨機選取待刪除資料的個數

maxmemory-samples #選取資料時並不會全庫掃瞄,導致嚴重的效能消耗,降低讀寫效能。因此採用隨機獲取資料的方式作為待檢測刪除資料

選擇刪除策略

maxmemory-policy #達到最大記憶體後,對被挑選出來的資料進行刪除的方式

刪除方式:

檢測易失資料(可能會過期的資料集server.db[i].expires)

1.volatile-lru:挑選最近最早使用的資料淘汰

2.volatile-lfu:挑選最近使用次數最少的資料淘汰

3.volatile-ttl:挑選將要過期的資料淘汰

4.volatile-random:任意選擇資料淘汰

檢測全庫資料(所有資料server.db[i].dict)

5.allkeys-lru:挑選最近最早使用的資料淘汰

6.allkeys-lfu:挑選最近使用次數最少的資料淘汰

7.allkeys-random:任意選擇資料淘汰

放棄資料驅逐

8.no-enviction(驅逐):禁止驅逐資料(redis4.0中預設策略),會引發錯誤oom

maxmemory-policy volatile-lru

Redis 過期資料怎麼處理

在 redis 中,是可以設定過期資料的,redis 提供了兩種的方式,用於刪除過期的資料!redis 預設 100ms 隨即抽取部分設定過期時間的 key,過期了就刪除。優點是避免長時間的在掃瞄過期 key,缺點是有些過期 key 無法被刪除。不掃瞄全部 key 的原因是,當設定了過期時間的 ke...

Redis過期資料和刪除策略

因為記憶體有限,有些資料不需要一直在記憶體中,可以設定一些規則,將一些資料設定過期,在記憶體中刪除,當然也不是隨便刪除,也要考慮到cpu的繁忙與空閒,以免出現redis各種命令執行很多,但是正好出現大量過期資料,已造成伺服器宕機 是在記憶體占用與cpu占用之間尋找一種平衡,顧此失彼都會造成redis...

mongodb刪除過期資料

通常,你往某乙個mongo庫中插資料,然後按日輪詢,最終這個資料會越來越多,對於不用的資料需要進行清理。這篇文章主要將如何清理過期資料。舉個例子 你只需要最近2個月的資料,比如今天是20170829,那麼60天之前的資料都可以清理掉。你可以寫乙個crontab任務,然後匯入指令碼,每天執行一次,將6...