清理redis佔用內存,並限制maxmemory最大佔用內存,設置redis置換策略
本教程環境:
寶塔linux面板,redis5.0
操作系統:CentOS 7.3 x64
寶塔面板默認redis安裝目錄:/www/server/redis
清理redis佔用的內存空間
1.進入Redis目錄
cd /www/server/redis
2.運行redis客戶端
redis-cli
3.清理redis數據
flushall
#清空整个Redis服务器数据(删除所有数据库所有key)
flushdb
#清空当前数据库中的所有key
上面三步的截圖
中間我輸入的keys *這個命令是查看redis的數據的,意思是查看redis中的所有key,可以看到現在是沒數據了。
此時你發現,執行命令後內存佔用並沒有減少。
原因redis官方有說明:https://redis.io/topics/memory-optimization
大致意思就是,redis實際已經清理了內存。但是他沒有把佔用的這部分內存返回給操作系統。而是留著預備下次新的數據直接寫入。
我們想清理掉應該怎麼辦呢?
可以執行以下命令
可以使用MEMORY PURGE命令進行內存整理。瞬間會將內存釋放出來。下面截圖我運行了兩次。一次即可。
設置redis最大佔用內存值
這里以設置最大佔用100MB為例。
1.先查看下現在的佔用設置
CONFIG GET maxmemory
一般返回
1) “maxmemory”
2) “0”
這個0在x64系統下是不限制的意思。
2.設置redis最大可使用100MB內存
CONFIG SET maxmemory 100MB
會返回個ok。
3.再查看內存佔用設置
CONFIG GET maxmemory
返回
1) “maxmemory”
2) “104857600”
以上三步截圖:
設置redis數據置換策略
上面我們設置了redis的最大佔用內存,如果說內存佔用達到了我們的設置值怎麼辦?
我們需要對redis設置一下置換策略。
redis置換策略可以對不經常使用的key數據進行替換刪除
一般有以下幾種置換策略
noeviction: 不进行置换,表示即使内存达到上限也不进行置换,所有能引起内存增加的命令都会返回error
allkeys-lru: 优先删除掉最近最不经常使用的key,用以保存新数据
volatile-lru: 只从设置失效(expire set)的key中选择最近最不经常使用的key进行删除,用以保存新数据
allkeys-random: 随机从all-keys中选择一些key进行删除,用以保存新数据
volatile-random: 只从设置失效(expire set)的key中,选择一些key进行删除,用以保存新数据
volatile-ttl: 只从设置失效(expire set)的key中,选出存活时间(TTL)最短的key进行删除,用以保存新数据
具體選擇那種徐要根據自己實際業務來選擇。
本教程用的allkeys-lru策略
還是跟上面的一樣的設置方式,進入redis-cli然後輸入下面的命令即可。
CONFIG GET allkeys-lru
因為redis中我剛剛刪除了所有數據,所以會得到(empty list or set)的提示
大功告成!