目录

  • 一,ERR command not allowed when used memory > 'maxmemory'
  • 1,报错信息和错误表现形式
  • 2,问题分析
  • 3,处理方式
  • 4,rehash所需内存计算


redis错误集锦
工作中遇到的Redis出错备忘。

一,ERR command not allowed when used memory > ‘maxmemory’

1,报错信息和错误表现形式

报错信息如下:

Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR command not allowed when used memory > 'maxmemory'

在监控页面的表现形式为:

redis client 乱码 redis常见错误_sed

在十一点的时候Redis的内存突然暴涨,然后又下降。内存也随之增加了。使用的redis是一组四个的Redis组,十一点时只有其中Redis出现了这种情况,在之前的九点钟有另外一个Redis也出现了类似的错误。

2,问题分析

从图中可以看到实际是随着Redis key的增加,Redis进行了rehash操作,rehash操作。

rehash 是redis自身的机制,key数量越多 越容易触发rehash。
随着key数量的增多,rehash占用的内存会越来越大。
rehash 结束后,内存又会降下去,rehash 过程不会特别久。从图中也可以看出内存是先突增然后又降下去了。这是内存突增到了瓶颈,内存自动扩容,所以内存增大了。rehash结束之后内存又释放了。

3,处理方式

  • 内存预留出rehash需要的空间来
  • 减少key数量

4,rehash所需内存计算

rehash所需要的内存计算公式比较复杂,但是有个粗略计算的:
key数量 * 16 * 2

比如有67000000个key
67000000 * 16 * 2 / 1024 / 1024 / 1024 =1.996 大约2G