Redis之淘汰策略


Redis 內存數據集大小上升到一定大小的時候,就會進行數據淘汰策略。

Redis 提供了 6 種數據淘汰策略:

1. volatile-lru:從已設置過期時間的數據集中挑選最近最少使用的數據淘汰。

2. volatile-ttl:從已設置過期時間的數據集中挑選將要過期的數據淘汰。

3. volatile-random:從已設置過期時間的數據集中任意選擇數據淘汰。

4. allkeys-lru:從數據集中挑選最近最少使用的數據淘汰。

5. allkeys-random:從數據集中任意選擇數據淘汰,當內存達到限制的時候,對所有數據集挑選隨機淘汰,可寫入新的數據集。

6. no-enviction:當內存達到限制的時候,不淘汰任何數據,不可寫入任何數據集,所有引起申請內存的命令會報錯。

7. allkeys-lfu 從數據集(server.db[i].dict)中挑選使用頻率最小的數據淘汰,該策略要淘汰的key面向的是全體key集合,而非過期的key集合。

8. volatile-lfu 從設置過期時間的數據集(server.db[i].expires)中挑選出使用頻率最小的數據淘汰。沒有設置過期時間的key不會被淘汰,這樣就可以在增加內存空間的同時保證需要持久化的數據不會丟失

 

如何配置:

我們通過配置redis.conf中的maxmemory這個值來開啟內存淘汰功能。

# maxmemory

值得注意的是,maxmemory為0的時候表示我們對Redis的內存使用沒有限制。

根據應用場景,選擇淘汰策略

# maxmemory-policy noeviction

設置最大內存

config set maxmemory 100000

設置淘汰策略

config set maxmemory-policy noeviction

三、如何選擇淘汰策略

下面看看幾種策略的適用場景

allkeys-lru:如果我們的應用對緩存的訪問符合冪律分布,也就是存在相對熱點數據,或者我們不太清楚我們應用的緩存訪問分布狀況,我們可以選擇allkeys-lru策略。

allkeys-random:如果我們的應用對於緩存key的訪問概率相等,則可以使用這個策略。

volatile-ttl:這種策略使得我們可以向Redis提示哪些key更適合被eviction。

另外,volatile-lru策略和volatile-random策略適合我們將一個Redis實例既應用於緩存和又應用於持久化存儲的時候,然而我們也可以通過使用兩個Redis實例來達到相同的效果,值得一提的是將key設置過期時間實際上會消耗更多的內存,因此我們建議使用allkeys-lru策略從而更有效率的使用內存。

 

備注:

  1) 在64bit系統下,maxmemory設置為0表示不限制Redis內存使用,在32bit系統下,maxmemory隱式不能超過3GB。當Redis內存使用達到指定的限制時,就需要選擇一個置換的策略

  2)置換策略是如何工作的

    理解置換策略的執行方式是非常重要的,比如:

    1. 客戶端執行一條新命令,導致數據庫需要增加數據(比如set key value)

    2. Redis會檢查內存使用,如果內存使用超過maxmemory,就會按照置換策略刪除一些key

    3. 新的命令執行成功

   3) 在Redis  4.x版本以后支持le LFU策略,最少頻率使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM