redis 之 LRU 策略淘汰配置

2021-09-21 07:34:31 字數 1381 閱讀 1786

redis lru cache可以通過引數maxmemory,在配置檔案redis.conf中設定,或者在redis服務啟動之後使用config set命令設定。例如在redis.conf中設定cache大小為100mb:

maxmemory 100mb

maxmemory設定為0,表示cache大小無限制(注意:32位作業系統最大支援3gb的記憶體,32位作業系統中maxmemory最大為3g)

redis cache資料淘汰策略

在指定了redis cache大小後,可以使用引數maxmemory-policy來指定cache的資料置換策略。redis提供的資料置換策略有以下幾種:

在上述策略中,如果cache中所有的keys都沒有過期,volatile-lruvolatile-ttlvolatile-random這三個將會像noevictio策略一樣,cache耗盡時丟擲錯誤。

如果某些key訪問比較頻繁,但一些key不經常訪問,可以採用allkeys-lru策略,此策略也可以用於不確定key訪問頻率的應用中;

如果所有的key的訪問頻率比較均衡,比如迴圈的訪問cache中的key,可以採用allkeys-random策略。

另外需要注意的是:設定key過期是需要耗費一定記憶體的,實際應用中需要考量是否必須設定key的過期時間。

如果乙個命令結果的資料集比較大,這時記憶體的消耗可能會超過maxmemory設定的值。

redis lru演算法

redis lru演算法不是乙個確切的lru實現,這意味著redis 並不是保證取得所有資料集中最近最少使用(lru)的鍵值對,而只是隨機挑選的幾個鍵值對中的某個key。

redis3.0中提供了乙個候選淘汰池(翻譯不太準確,望指正),改進了近似lru演算法的執行效率,更符合實際的lru演算法。

每次從cache中隨機取出多少個keys執行淘汰策略是非常重要的,可以通過引數maxmemory-samples來設定。

為什麼不採用真正的lru演算法

真正的lru會耗費大量記憶體,redis最主要的做法:淘汰時,隨機取多個keys,找到最老的進行淘汰.雖不能保證一定淘汰最老的,但傾向於淘汰偏老的keys。

此外官方文件上說,如果資料訪問模模型越符合冪次定律,則redis 的lru近似演算法和真實的lru演算法越接近(看的不是太明白,可以翻翻相關資料,大概就是說,20%資料訪問非常頻繁,80%的資料訪問不是很頻繁時,redis的lru近似演算法和真實的lru演算法是相差最小的)。

redis 記憶體淘汰策略配置

在配置檔案有一行 maxmemory policy volatile lru 對應的策略 noeviction 當記憶體使用達到閾值的時候,所有引起申請記憶體的命令會報錯。volatile lru 在設定了過期時間的鍵空間中,優先移除最近未使用的key。allkeys random 在主鍵空間中,隨...

InnoDB的LRU淘汰策略

reference innodb儲存引擎是基於集合索引實現的資料儲存,也就是除了索引列以及主鍵是儲存在b 樹之外,其它列資料也儲存在b 樹的葉子節點中。而這裡的索引頁和資料頁都會快取在緩衝池中,在查詢資料時,只要在緩衝池中存在該資料,innodb就不用每次都去磁碟中讀取頁,從而提高資料庫的查詢效能。...

redis筆記之淘汰策略

redis把過期的資料都清除完畢後,大量的資料還是會對記憶體進行占用,記憶體的大小可以進行自我配置。使用maxmemory配置指令是為了將redis配置為對資料集使用指定的記憶體量。可以在redis.conf中進行配置 maxmemory 也可以在執行時使用config set命令來設定。redis...