現象
日志里出現異常:
OOM command not allowed when used memory > 'maxmemory'
原因
內存已滿,不允許再存數據了,可以通過redis-cli 查看redis的具體信息
127.0.0.1:6379> info memory # Memory used_memory:4120248 used_memory_human:3.93M used_memory_rss:11509760 used_memory_peak:1977983104 used_memory_peak_human:1.84G used_memory_lua:36864 mem_fragmentation_ratio:2.79 mem_allocator:jemalloc-3.6.0
注:
- used_memory_human表示已用內存
- used_memory_rss表示系統給redis分配的內存(即常駐內存)
- mem_fragmentation_ratio=used_memory_rss/used_memory比例,一般情況下,used_memory_rss略高於used_memory,當內存碎片較多時,則mem_fragmentation_ratio會較大,可以反映內存碎片是否很多
解決
注:如修改了配置文件需重啟redis
1. 增加redis內存,修改redis.conf
maxmemory 2gb
2. 修改redis存儲策略
默認的redis設置是非常保守的,即內存超限后就不在存儲,可以把策略修改為LRU算法(最近最少使用算法)——新存儲的信息會替換掉舊的信息,從而不會是內存越線,修改redis.conf
maxmemory-policy volatile-lru
3. 少往reids存數據
是否有必要把這么多數據存入redis?