配置:
- redis.conf配置文件中配置最大可用內(nèi)存
//設(shè)置Redis最大占用內(nèi)存大小為100M
maxmemory 100mb
- 命令操作:
//設(shè)置Redis最大占用內(nèi)存大小為100M
127.0.0.1:6379> config set maxmemory 100mb
//獲取設(shè)置的Redis能使用的最大內(nèi)存大小
127.0.0.1:6379> config get maxmemory
- redis內(nèi)存淘汰機制:
種類:
- noeviction(默認策略):對于寫請求不再提供服務(wù),直接返回錯誤(DEL請求和部分特殊請求除外)
- allkeys-lru:從所有key中使用LRU算法進行淘汰
- volatile-lru:從設(shè)置了過期時間的key中使用LRU算法進行淘汰
- allkeys-random:從所有key中隨機淘汰數(shù)據(jù)
- volatile-random:從設(shè)置了過期時間的key中隨機淘汰
- volatile-ttl:在設(shè)置了過期時間的key中,根據(jù)key的過期時間進行淘汰,越早過期的越優(yōu)先被淘汰
內(nèi)存淘汰機制設(shè)置獲取修改:
- 獲取:127.0.0.1:6379> config get maxmemory-policy
- 設(shè)置:maxmemory-policy allkeys-lru(通過redis.conf文件)
- 修改:127.0.0.1:6379> config set maxmemory-policy allkeys-lru
- LRU算法:
- 概念:LRU(Least Recently Used),即最近最少使用,是一種緩存置換算法其核心思想是:如果一個數(shù)據(jù)在最近一段時間沒有被用到,那么將來被使用到的可能性也很小,所以就可以被淘汰掉。
- LRU在redis中的實現(xiàn):
redis實現(xiàn)的是近似LRU算法,近似的LRU算法通過隨機采樣法淘汰數(shù)據(jù),每次選取出五個(默認值)數(shù)據(jù)key,從里面淘汰最近最少使用的key。redis為了實現(xiàn)近似LRU算法,給每個key值增加了一個24bit的字段用于存儲最后一次被訪問的時間。
- redis3.0對LRU算法的優(yōu)化:
新算法維護一個候選池(大小16),池中的數(shù)據(jù)根據(jù)訪問時間進行排序,第一次隨機選取的key值會被放入池中,隨后每次選取的key值只有訪問時間小于池中最小訪問時間才會放入直到放滿,如果有新加入則移除池中最后訪問時間最大的key,當需要進行淘汰時,則直接從池中選取最近訪問時間最?。ㄗ罹脹]有被調(diào)用)的進行淘汰。
- LFU算法:
- 概念:LFU算法是Redis4.0里面新加的一種淘汰策略。它的全稱是Least Frequently Used,它的核心思想是根據(jù)key的最近被訪問的頻率進行淘汰,很少被訪問的優(yōu)先被淘汰,被訪問的多的則被留下來。
- 策略:LFU一共有兩種策略:
1.volatile-lfu:在設(shè)置了過期時間的key中使用LFU算法淘汰key
2.allkeys-lfu:在所有的key中使用LFU算法淘汰數(shù)據(jù)
- 注意:
1. 如果不設(shè)置內(nèi)存大小或內(nèi)存大小設(shè)置為0,64位操作系統(tǒng)將不限制內(nèi)存大小,32位操作系統(tǒng)將限制最大可用內(nèi)存為3G。
2.redis內(nèi)存淘汰機制中當使用volatile-lru、volatile-random、volatile-ttl這三種策略時,如果沒有key可以被淘汰,則和noeviction一樣返回錯誤
3.redis中的LRU算法可以通過maxmemory-samples參數(shù)修改采樣數(shù)量:例:maxmemory-samples 10
maxmenory-samples配置的越大,淘汰的結(jié)果越接近于嚴格的LRU算法
4.設(shè)置使用這兩種淘汰策略跟前面講的一樣,不過要注意的一點是這兩周策略只能在Redis4.0及以上設(shè)置,如果在Redis4.0以下設(shè)置會報錯