0
点赞
收藏
分享

微信扫一扫

解决redis运行期间key值过期但是内存memory依然占用过高

  • 要解决这个问题,首先要了解redis info信息中几个数据的意义:

used_memory: 810575104 //数据占用了多少内存(字节)
used_memory_human: 773.02M //数据占用了多少内存(带单位的,可读性好)
used_memory_rss: 885465088 //redis占用了多少内存
used_memory_rss_human: 844.45M //redis占用了多少内存(带单位的,可读性好)
used_memory_peak: 2001274696 //占用内存的峰值(字节)
used_memory_peak_human: 1.86G //占用内存的峰值(带单位的,可读性好)
mem_fragmentation_ratio: 1.09 //内存碎片率

  • 里面需要注意的有:

used_memory_human 代表redis数据数据占用内存的大小,

used_memory_rss_human 代表服务器时下为redis分配的内存大小,也就是redis具体占用内存的大小

used_memory_peak_human 代表redis在使用期间最高占用了多少内存。

mem_fragmentation_ratio = used_memory_rss / used_memory

mem_fragmentation_ratio 越低越高,趋向于1,大于1的部分redis碎片占用的大小。范围在1 - 1.5,大于1.5说明碎片过多,必须要清理了。

redis的碎片清理:

  • redis4.0以前内存碎片过多的情况下只能关闭redis重启后才能生效。

  • redis4.0以后新增了配置项:activedefrag

  • redis的配置项activedefrag默认为no,未开启,不会自动回收内存清理碎片,

  • 当需要清理碎片的时候,使用命令
    config set activedefrag yes
  • 将activedefrag的配置设置为开启状态。则redis会自动清理碎片,回收内存。
举报

相关推荐

0 条评论