中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis緩存中的淘汰策略有哪些

發布時間:2021-11-08 10:37:06 來源:億速云 閱讀:205 作者:iii 欄目:關系型數據庫

本篇內容主要講解“Redis緩存中的淘汰策略有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Redis緩存中的淘汰策略有哪些”吧!

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 后新增)三種。

Redis緩存中的淘汰策略有哪些

在redis3.0之前,默認是volatile-lru;在redis3.0之后(包括3.0),默認淘汰策略則是noeviction

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算法即是最近最常使用算法,由于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緩存中的淘汰策略有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

健康| 浦江县| 姚安县| 册亨县| 卓资县| 台前县| 五指山市| 鞍山市| 兴安盟| 屏东市| 德格县| 瑞丽市| 聂荣县| 桐柏县| 伊宁市| 得荣县| 宜君县| 靖江市| 赫章县| 繁峙县| 清苑县| 灵宝市| 囊谦县| 牙克石市| 青岛市| 江油市| 鲁甸县| 安义县| 万宁市| 琼海市| 定结县| 高陵县| 和顺县| 新晃| 伊宁市| 阿拉尔市| 临夏市| 大化| 云南省| 雅江县| 武陟县|