- http://www.redis.cn/commands/expire.html
- http://www.redis.cn/topics/lru-cache.html
記憶體管理
當 Redis 作為快取使用時(此時快取僅作為熱點資料提高服務的訪問性能),需要考慮記憶體的限制,以及如何隨著業務的增長,僅保留熱點資料,

過期時間
Redis 所有的資料結構都可以設定過期時間,時間到了,Redis 會自動洗掉相應的物件,
需要注意的:
- 過期
expire是以物件為單位,比如一個 hash 結構的過期是整個 hash 物件的過期,而不是其中的某個子 key, - 如果一個字串已經設定了過期時間,然后你呼叫了 set 方法修改了它,它的過期時間會消失,
127.0.0.1:6379> set k1 aaa
OK
127.0.0.1:6379> expire k1 600
(integer) 1
127.0.0.1:6379> ttl k1
(integer) 597
127.0.0.1:6379> set k1 bbb
OK
127.0.0.1:6379> ttl k1
(integer) -1...
淘汰過期的 Keys
Redis keys過期有兩種方式:被動和主動方式,
- 被動
當一些客戶端嘗試訪問它時,key會被發現并主動的過期,
- 主動
當然,這樣是不夠的,因為有些過期的keys,永遠不會訪問他們,
無論如何,這些keys應該過期,所以定時隨機測驗設定keys的過期時間,所有這些過期的keys將會從密鑰空間洗掉,
具體就是Redis每秒10次做的事情:
- 1.測驗隨機的20個keys進行相關過期檢測,
- 2.洗掉所有已經過期的keys,
- 3.如果有多于25%的keys過期,重復步奏1.
這是一個平凡的概率演算法,基本上的假設是,我們的樣本是這個密鑰控制元件,
并且我們不斷重復過期檢測,直到過期的keys的百分百低于25%,這意味著,在任何給定的時刻,最多會清除1/4的過期keys,
記憶體淘汰
在 redis.conf 或 使用 CONFIG 命令配置 Redis的配置項:
maxmemory 100mb
maxmemory-policy [策略]
淘汰策略:
LRU- 最近很少沒碰
對最近很少使用(所有或有過期時間的)的key優先淘汰
allkeys-lru嘗試回收最少使用的鍵(LRU),使得新添加的資料有空間存放,volatile-lru嘗試回收最少使用的鍵(LRU),但僅限于在過期集合的鍵,使得新添加的資料有空間存放,LFU- 沒碰多少次
對使用頻率最少(所有或有過期時間的)的key優先淘汰
-
allkeys-lfu嘗試回識訓收使用頻率最少的鍵(LFU),使得新添加的資料有空間存放, -
volatile-lfu嘗試回收使用頻率最少的鍵(LFU),但僅限于在過期集合的鍵,使得新添加的資料有空間存放, -
volatile-ttl對有過期時間的key中ttl最小的部分優先淘汰 -
noeviction回傳錯誤 -
allkeys-random: 回收隨機的鍵使得新添加的資料有空間存放,
-
volatile-random: 回收隨機的鍵使得新添加的資料有空間存放,但僅限于在過期集合的鍵,
近似LRU演算法
Redis的LRU演算法并非完整的實作,這意味著Redis并沒辦法選擇最佳候選來進行回收,也就是最久未被訪問的鍵,
相反它會嘗試運行一個近似LRU的演算法,通過對少量keys進行取樣,然后回收其中一個最好的key(被訪問時間較早的),
Redis LRU有個很重要的點,你通過調整每次回收時檢查的采樣數量,以實作調整演算法的精度,這個引數可以通過以下的配置指令調整:
maxmemory-samples 5
@SvenAugustus (https://my.oschina.net/langxSpirit)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/4607.html
標籤:NoSQL
上一篇:Cassandra 簡介
下一篇:Redis 持久化詳解
