設置Redis的LRU策略

概念

LRU(Least Recently Used)最近最少使用算法是衆多置換算法中的一種。算法

maxmemory

Redis中有一個maxmemory概念,主要是爲了將使用的內存限定在一個固定的大小。Redis用到的LRU 算法,是一種近似的LRU算法。數據庫

設置maxmemory

127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "0"
127.0.0.1:6379> CONFIG SET maxmemory 100MB
OK
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "104857600"

注意,在64bit系統下,maxmemory設置爲0表示不限制Redis內存使用,在32bit系統下,maxmemory隱式不能超過3GB。 當Redis內存使用達到指定的限制時,就須要選擇一個置換的策略。dom

置換策略

當Redis內存使用達到maxmemory時,須要選擇設置好的maxmemory-policy進行對老數據的置換。
下面是能夠選擇的置換策略:code

  1. noeviction: 不進行置換,表示即便內存達到上限也不進行置換,全部能引發內存增長的命令都會返回error
  2. allkeys-lru: 優先刪除掉最近最不常常使用的key,用以保存新數據
  3. volatile-lru: 只從設置失效(expire set)的key中選擇最近最不常常使用的key進行刪除,用以保存新數據
  4. allkeys-random: 隨機從all-keys中選擇一些key進行刪除,用以保存新數據
  5. volatile-random: 只從設置失效(expire set)的key中,選擇一些key進行刪除,用以保存新數據
  6. volatile-ttl: 只從設置失效(expire set)的key中,選出存活時間(TTL)最短的key進行刪除,用以保存新數據

volatile-lru和volatile-random常常在一個Redis實例既作cache又作持久化的狀況下用到,然而,更好的選擇使用兩個Redis實例來解決這個問題。設置是失效時間expire會佔用一些內存,而採用allkeys-lru就沒有必要設置失效時間,進而更有效的利用內存。內存

3 置換策略是如何工做的

理解置換策略的執行方式是很是重要的,好比:it

  1. 客戶端執行一條新命令,致使數據庫須要增長數據(好比set key value)
  2. Redis會檢查內存使用,若是內存使用超過maxmemory,就會按照置換策略刪除一些key
  3. 新的命令執行成功

咱們持續的寫數據會致使內存達到或超出上限maxmemory,可是置換策略會將內存使用下降到上限如下。io

若是一次須要使用不少的內存(好比一次寫入一個很大的set),那麼,Redis的內存使用可能超出最大內存限制一段時間。ast

設置轉換策略sed

127.0.0.1:6379> CONFIG GET maxmemory-policy
1) "maxmemory"
2) "0"
127.0.0.1:6379> CONFIG SET maxmemory-policy allkeys-lru
OK
127.0.0.1:6379> CONFIG GET maxmemory-policy
1) "maxmemory-policy"
2) "allkeys-lru"
相關文章
相關標籤/搜索