redis占用内存过大怎么解决?2个有效的解决方式!

10个月前 (05-14 09:01)阅读1689回复0
翱翔MJ
翱翔MJ
  • 管理员
  • 注册排名1
  • 经验值3810
  • 级别管理员
  • 主题632
  • 回复325
楼主

Redis 使用 maxmemory 参数限制最大可用内存。限制内存的目的主要有:

1、用于缓存场景,当超出内存上限 maxmemory 时使用 LRU 等回收策略释放空间

2、防止所用的内存超过服务器物理内存,导致 OOM 后进程被系统杀死

maxmemory 限制的是 Redis 实际使用的内存量,也就是 used_memory 对应的内存。

实际消耗的内存可能会比 maxmemory 设置的大,要小心因为这部分内存导致 OOM。所以,如果你有 10GB 的物理内存,最好将 maxmemory 设置为 8 或者9G

image.png

Redis默认采用noeviction策略

volatile-lru:
# 在设置了过期时间的所有键中,选取最近最少使用的数据删除

volatile-lfu:
# 在设置了过期时间的所有键中,选取最近最不常用,也就是一定时期内被访问次数最少的数据删除

volatile-random:
# 筛选出设置了过期时间的键值对,随机删除。

volatile-ttl:
# 筛选出设置了过期时间的键值对,越早过期的越先被删除。

allkeys-lru:
# 在所有键中,选取最近最少使用的数据删除

allkeys-lfu:
# 在所有键中,选取最近最不常用,也就是一定时期内被访问次数最少的数据删除

allkeys-random:
# 采用随机淘汰策略删除所有的键值对,这个策略不常用。

noeviction:
# 不淘汰任何键值对,当内存满时,如果进行读操作,例如get命令,它将正常工作,
# 如果做写操作,它将返回错误,
# 也就是说,当Redis采用这个策略内存达到最大的时候,它就只能读不能写了

所以最后可以设置如下两个字段:

maxmemory 2097152000
maxmemory_policy allkeys-lru
0
回帖

redis占用内存过大怎么解决?2个有效的解决方式! 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息