redis 提供 6種數據淘汰策略


redis 提供 6種數據淘汰策略

淘汰策略的原因

在 redis 中,允許用戶設置最大使用內存大小 server.maxmemory,在內存限定的情況下是很有用的。譬如,在一台 8G 機子上部署了 4 個 redis 服務點,每一個服務點分配 1.5G 的內存大小,減少內存緊張的情況,由此獲取更為穩健的服務。

6中淘汰策略

redis 內存數據集大小上升到一定大小的時候,就會施行數據淘汰策略。redis 提供 6種數據淘汰策略:

volatile-lru:從設置了過期時間的數據集中,選擇最近最久未使用的數據釋放;
allkeys-lru:從數據集中(包括設置過期時間以及未設置過期時間的數據集中),選擇最近最久未使用的數據釋放;
volatile-random:從設置了過期時間的數據集中,隨機選擇一個數據進行釋放;
allkeys-random:從數據集中(包括了設置過期時間以及未設置過期時間)隨機選擇一個數據進行入釋放;
volatile-ttl:從設置了過期時間的數據集中,選擇馬上就要過期的數據進行釋放操作;
noeviction:不刪除任意數據(但redis還會根據引用計數器進行釋放),這時如果內存不夠時,會直接返回錯誤。

記憶方式:
單詞組成:3個volatile開頭的,2個all_keys開頭。都是lru,random,只有volatile有ttl方式。最后加一個noeviction
volatile:指的都是快過期的數據集。
all_keys:是所有的數據集。
lrc:是選擇最近長時間不使用的,一般用作緩存機制。
random:就是隨機選一個。
ttl:就是過期時間的設置
noeviction:不做任何設置

默認的內存策略是noeviction,在Redis中LRU算法是一個近似算法,默認情況下,Redis隨機挑選5個鍵,並且從中選取一個最近最久未使用的key進行淘汰,在配置文件中可以通過maxmemory-samples的值來設置redis需要檢查key的個數,但是檢查的越多,耗費的時間也就越久,但是結構越精確(也就是Redis從內存中淘汰的對象未使用的時間也就越久~),設置多少,綜合權衡。

一般來說,推薦使用的策略是volatile-lru,並辨識Redis中保存的數據的重要性。對於那些重要的,絕對不能丟棄的數據(如配置類數據等),應不設置有效期,這樣Redis就永遠不會淘汰這些數據。對於那些相對不是那么重要的,並且能夠熱加載的數據(比如緩存最近登錄的用戶信息,當在Redis中找不到時,程序會去DB中讀取),可以設置上有效期,這樣在內存不夠時Redis就會淘汰這部分數據。

配置文件

# maxmemory <bytes>
# volatile-lru -> remove the key with an expire set using an LRU algorithm
# allkeys-lru -> remove any key according to the LRU algorithm
# volatile-random -> remove a random key with an expire set
# allkeys-random -> remove a random key, any key
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# noeviction -> don't expire at all, just return an error on write operations
# The default is:
# maxmemory-policy noeviction

我們可以設置maxmemory ,當數據達到限定大小后,會選擇配置的策略淘汰數據

 


免責聲明!

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



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