您好,登錄后才能下訂單哦!
本篇內容主要講解“Redis緩存中的淘汰策略有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Redis緩存中的淘汰策略有哪些”吧!
我們知道Redis
緩存使用內存來保存數據,但內存大小畢竟有限,隨著要緩存的數據量越來越大,有限的緩存空間不可避免地會被寫滿。這時候就需要緩存的淘汰策略去刪除數據。
Redis的淘汰策略,根據是否會進行數據淘汰可以把它們分成兩類:
不進行數據淘汰的策略,只有 noeviction 這一種。
會進行淘汰的 7 種其他策略。
會進行淘汰的 7 種策略,我們可以再進一步根據淘汰候選數據集的范圍把它們分成兩類:
在設置了過期時間的數據中進行淘汰,包括 volatile-random、volatile-ttl、volatile-lru、volatile-lfu(Redis 4.0 后新增)四種。
在所有數據范圍內進行淘汰,包括 allkeys-lru、allkeys-random、allkeys-lfu(Redis 4.0 后新增)三種。
在redis3.0之前,默認是volatile-lru
;在redis3.0之后(包括3.0),默認淘汰策略則是noeviction
noeviction表示不淘汰數據,當緩存數據滿了,有新的寫請求進來,Redis不再提供服務,而是直接返回錯誤。
volatile-random、volatile-ttl、volatile-lru、volatile-lfu 四種策略是針對已經設置了過期時間的鍵值對。到鍵值對的到期時間到了或者Redis內存使用量達到了maxmemory
閾值,Redis會根據這些策略對鍵值對進行淘汰;
volatile-ttl 在篩選時,會針對設置了過期時間的鍵值對,根據過期時間的先后進行刪除,越早過期的越先被刪除。
volatile-random 就像它的名稱一樣,在設置了過期時間的鍵值對中,進行隨機刪除。
volatile-lru 會使用 LRU 算法篩選設置了過期時間的鍵值對。
volatile-lfu 會使用 LFU 算法選擇設置了過期時間的鍵值對。
allkeys-lru、allkeys-random、allkeys-lfu 這三種策略淘汰的數據范圍擴大到所有的鍵值對,無論這些鍵值對是否設置了過期時間,篩選數據進行淘汰的規則是:
allkeys-random 策略,從所有鍵值對中隨機選擇并刪除數據;
allkeys-lru 策略,使用 LRU 算法在所有數據中進行篩選。
allkeys-lfu 策略,使用 LFU 算法在所有數據中進行篩選。
LRU算法即是最近最常使用算法,由于LRU會使用一個鏈表去維護使用的數據列表,當使用的數據越多,其移動元素時就會越耗時,這不可避免地會影響到Redis主線程。為此Redis對lru算法做了些簡化。
LRU 策略的核心思想:如果一個數據剛剛被訪問,那么這個數據肯定是熱數據,還會被再次訪問。
按照這個核心思想,Redis 中的 LRU 策略,會在每個數據對應的 RedisObject 結構體中設置一個 lru 字段,用來記錄數據的訪問時間戳。在進行數據淘汰時,LRU 策略會在候選數據集中淘汰掉 lru 字段值最小的數據(也就是訪問時間最久的數據)。
所以,在數據被頻繁訪問的業務場景中,LRU 策略的確能有效留存訪問時間最近的數據。而且,因為留存的這些數據還會被再次訪問,所以又可以提升業務應用的訪問速度。
具體做法是,在訪問鍵值對時,redis會記錄最近一次訪問的時間戳。在redis決定淘汰數據時,會隨機挑選N個數據,把它們作為一個候選集合,把最小的時間戳給篩選出去。當下一次要淘汰數據時,會挑選比第一次挑選的候選集合時間戳值要小的數據進入新的候選集合。當數據達到maxmemory-samples 時,將最小的值給淘汰掉。
通過該命令可以設置挑選的候選集合數CONFIG SET maxmemory-samples N
依據策略的特性,可以針對不同場景選擇不同的策略去淘汰數據。
當緩存數據沒有明顯的冷熱之分,即數據的訪問頻率差距不大,建議使用allkeys-random
隨機策略淘汰數據;
當數據有明顯的冷熱之分,建議使用allkeys-lru
或者volatile-lru
算法,將最近最常訪問的數據留在緩存數據中;
當業務中存在置頂需求,即不會過期的數據,這類一般不會設置過期時間,可以采用volatile-lru
策略。這樣這類數據就不會被淘汰,而其它數據可以根據lru規則進行淘汰。
到此,相信大家對“Redis緩存中的淘汰策略有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。