LRU(Least Recently Used)最近最少使用算法是衆多置換算法中的一種。算法
Redis中有一個maxmemory概念,主要是爲了將使用的內存限定在一個固定的大小。Redis用到的LRU 算法,是一種近似的LRU算法。數據庫
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
volatile-lru和volatile-random常常在一個Redis實例既作cache又作持久化的狀況下用到,然而,更好的選擇使用兩個Redis實例來解決這個問題。設置是失效時間expire會佔用一些內存,而採用allkeys-lru就沒有必要設置失效時間,進而更有效的利用內存。內存
理解置換策略的執行方式是很是重要的,好比:it
咱們持續的寫數據會致使內存達到或超出上限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"