背景
眾所周知,redis是純記憶體的操作。所以速度極快。然而記憶體的大小是有限的。
如:mysql中有2000w的資料,redis中只存20w的資料,那麼如何保證redis中的資料都是熱點資料呢?
答案:redis記憶體資料集達到一定大小的時候,就會實行資料淘汰策略,記憶體的淘汰機制的初衷是為了更好地使用記憶體
寫在淘汰策略之前:reids 過期策略
我們在設定乙個key的時候,一般會給這個key設定乙個過期時間(expire time),如:key的過期時間1小時,那麼一小時到了,這個key是如何被刪除的呢?
答案就是:定期刪除+惰性刪除
定期刪除
指的是redis預設是每隔100ms就隨機抽取一些設定了過期時間的key,檢查其是否過期,如果過期就刪除。注意,這裡可不是每隔100ms就遍歷所有的設定過期時間的key,那樣就是一場效能上的災難。實際上redis是每隔100ms隨機抽取一些key來檢查和刪除的。定期刪除可能會導致很多過期key到了時間並沒有被刪除掉,這時候就需要惰性刪除了。
惰性刪除
在獲取某個key的時候,redis會檢查一下 ,這個key如果設定了過期時間那麼是否過期了?如果過期了此時就會刪除,不會給你返回任何東西。
兩種結合使用,就能夠保證:乙個key如果過期了,肯定會被刪除了
答案是:走記憶體淘汰機制。
redis的淘汰策略:
noeviction:記憶體滿了之後,會返回異常。
allkeys-lru:嘗試**,最近未使用或者使用比較少的鍵。(範圍是:所有的鍵)
volatile-lru:嘗試**,最近未使用或者使用比較少的鍵。(範圍是:設定了過期時間的鍵)
allkeys-random:隨機移除某個key。(範圍是:所有的鍵)
volatile-random:隨機移除某個key。(範圍是:設定了過期時間的鍵)
volatile-ttl:**過期時間較短的key。(範圍是:設定了過期時間的鍵)
本文參考了中華石杉
如何保證redis中都是熱點資料
redis 記憶體資料集大小上公升到一定大小的時候,就會施行資料淘汰策略。redis 提供 6種資料淘汰策略 volatile lru 從已設定過期時間的資料集 server.db i expires 中挑選最近最少使用的資料淘汰 volatile ttl 從已設定過期時間的資料集 server.d...
如何保證Redis中的資料都是熱點資料
redis 提供 6 種資料淘汰策略 1.volatile lru 從已設定過期時間的資料集 server.db i expires 中挑選最近最少使用的資料淘汰 常用 2.volatile ttl 從已設定過期時間的資料集 server.db i expires 中挑選將要過期的資料淘汰 3.vo...
關於保證Redis資料都是熱點資料
mysql裡有2000w資料,redis中只存20w的資料,如何保證redis中的資料都是熱點資料?redis 會根據自身資料淘汰策略,載入熱資料到記憶體。所以,計算一下 20w 資料大約占用的記憶體,然後設定一下 redis 記憶體限制即可。比如使用者資料。資料庫有2000w條。活躍使用者 red...