Redis占用內(nèi)存大小
1、通過配置文件配置
通過在Redis安裝目錄下面的redis.conf配置文件中添加以下配置設置內(nèi)存大小
//設置Redis最大占用內(nèi)存大小為100M
maxmemory 100mb
redis的配置文件不一定使用的是安裝目錄下面的redis.conf文件雕欺,啟動redis服務的時候是可以傳一個參數(shù)指定redis的配置文件的
2门坷、通過命令修改
Redis支持運行時通過命令動態(tài)修改內(nèi)存大小
//設置Redis最大占用內(nèi)存大小為100M
127.0.0.1:6379> config set maxmemory 100mb
//獲取設置的Redis能使用的最大內(nèi)存大小
127.0.0.1:6379> config get maxmemory
Redis的內(nèi)存淘汰
既然可以設置Redis最大占用內(nèi)存大小绘搞,那么配置的內(nèi)存就有用完的時候。那在內(nèi)存用完的時候,還繼續(xù)往Redis里面添加數(shù)據(jù)不就沒內(nèi)存可用了嗎税迷?
實際上Redis定義了幾種策略用來處理這種情況:
- noeviction(默認策略):對于寫請求不再提供服務,直接返回錯誤(DEL請求和部分特殊請求除外)
- allkeys-lru:從所有key中使用LRU算法進行淘汰
- volatile-lru:從設置了過期時間的key中使用LRU算法進行淘汰
- allkeys-random:從所有key中隨機淘汰數(shù)據(jù)
- volatile-random:從設置了過期時間的key中隨機淘汰
- volatile-ttl:在設置了過期時間的key中锹漱,根據(jù)key的過期時間進行淘汰箭养,越早過期的越優(yōu)先被淘汰
當使用volatile-lru、volatile-random哥牍、volatile-ttl這三種策略時毕泌,如果沒有key可以被淘汰,則和noeviction一樣返回錯誤
如何獲取及設置內(nèi)存淘汰策略
獲取當前內(nèi)存淘汰策略:
127.0.0.1:6379> config get maxmemory-policy
通過配置文件設置淘汰策略(修改redis.conf文件):
maxmemory-policy allkeys-lru
通過命令修改淘汰策略:
127.0.0.1:6379> config set maxmemory-policy allkeys-lru
LRU在Redis中的實現(xiàn)
近似LRU算法
Redis使用的是近似LRU算法嗅辣,它跟常規(guī)的LRU算法還不太一樣撼泛。近似LRU算法通過隨機采樣法淘汰數(shù)據(jù),每次隨機出5(默認)個key澡谭,從里面淘汰掉最近最少使用的key愿题。
可以通過maxmemory-samples參數(shù)修改采樣數(shù)量:
例:maxmemory-samples 10
maxmenory-samples配置的越大,淘汰的結(jié)果越接近于嚴格的LRU算法
Redis為了實現(xiàn)近似LRU算法译暂,給每個key增加了一個額外增加了一個24bit的字段抠忘,用來存儲該key最后一次被訪問的時間。
Redis3.0對近似LRU的優(yōu)化
Redis3.0對近似LRU算法進行了一些優(yōu)化外永。新算法會維護一個候選池(大小為16)崎脉,池中的數(shù)據(jù)根據(jù)訪問時間進行排序,第一次隨機選取的key都會放入池中伯顶,隨后每次隨機選取的key只有在訪問時間小于池中最小的時間才會放入池中囚灼,直到候選池被放滿骆膝。當放滿后,如果有新的key需要放入灶体,則將池中最后訪問時間最大(最近被訪問)的移除阅签。
當需要淘汰的時候,則直接從池中選取最近訪問時間最行椤(最久沒被訪問)的key淘汰掉就行政钟。
本文由猿必過 YBG 發(fā)布
禁止未經(jīng)授權(quán)轉(zhuǎn)載,違者依法追究相關(guān)法律責任
如需授權(quán)可聯(lián)系:zhuyunhui@yuanbiguo.com