redis 如何快速查找big key?

redis由于是内存数据库,经常需要查看是什么占用了内存资源。是否有什么方法可以快速找出什么大约是什么键占用了多大的内存

参与5

1同行回答

jwhdhrjwhdhr软件开发工程师农商银行
工作中,经常有些Redis实例使用不恰当,或者对业务预估不准确,或者key没有及时进行处理等等原因,导致某些KEY相当大。 那么大Key会带来哪些问题呢?如果是集群模式下,无法做到负载均衡,导致请求倾斜到某个实例上,而这个实例的QPS会比较大,内存占用也较多;对于Redis单线程模型又容易出...显示全部

工作中,经常有些Redis实例使用不恰当,或者对业务预估不准确,或者key没有及时进行处理等等原因,导致某些KEY相当大。
那么大Key会带来哪些问题呢?

如果是集群模式下,无法做到负载均衡,导致请求倾斜到某个实例上,而这个实例的QPS会比较大,内存占用也较多;对于Redis单线程模型又容易出现CPU瓶颈,当内存出现瓶颈时,只能进行纵向库容,使用更牛逼的服务器。
涉及到大key的操作,尤其是使用hgetall、lrange 0 -1、get、hmget 等操作时,网卡可能会成为瓶颈,也会到导致堵塞其它操作,qps 就有可能出现突降或者突升的情况,趋势上看起来十分不平滑,严重时会导致应用程序连不上,实例或者集群在某些时间段内不可用的状态。
假如这个key需要进行删除操作,如果直接进行DEL 操作,被操作的实例会被Block住,导致无法响应应用的请求,而这个Block的时间会随着key的变大而变长。
有以下几种办法可以知道某个Redis实例是否存在大key:

在redis实例上执行bgsave,然后我们对dump出来的rdb文件进行分析,找到其中的大KEY
有个不太推荐的命令,debug object xxx 可以看到这个key在内存中序列化后的大小,当然我们可以通过SCAN+debug object xxx 得到当前实例所有key的大小。
redis-cli 原生自带 –bigkeys 功能,可以找到某个实例 5种数据类型(String、hash、list、set、zset)的最大key。

收起
互联网服务 · 2018-06-08
浏览2305

提问者

landyz
数据库运维工程师wy

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2018-06-08
  • 关注会员:2 人
  • 问题浏览:4528
  • 最近回答:2018-06-08
  • X社区推广