Redis大key问题解析

近日遇到了Redis的一个问题,总结衍生出相关问题,具体如下:

  • 什么叫Redis大key?
  • 大key的危害是什么?
  • 如何确定大key?
  • 如何删除大key?

什么叫Redis大key?

大key,其实不是key值大,而是我们的value值很大。简单点其实就是大value。

对大key的特征有如下几点:

  • String类型的key值,对应的value大约15kb
  • zset、list、hash、set类型的,value值个数过多,1500左右。

大key的危害是什么?

网络阻塞

当一个大key过大, 自身会造成占用带宽较多,会连锁反应的引起这台服务器的其他服务的灾难

客户端超时

当一个大key过大,会引起请求超时,这时,后面的任务便无法正常运行了

内存过载

当读取大key的时候,会占用较多的内存,从而会导致内存溢出

影响集群

当我们删除一个大key的时候,会造成时间过长,会引发主从切换或者同步中断

如何确定大key?

redis-rdb-tools工具辅助完成

我们借助第三方工具,可以解析Redis的快照文件,辅助我们快速定位大key。下面这条命令可以帮助我们定位20KB的大key

 dump.rdb -c memory --bytes 20480 -f redis.csv

redis自带的redis-cli,来找出大key

可以通过redis-cli --bigkeys来查找出大key信息

如何删除大key?

分批次删除

删除list

通过Itrim命令,每次删除少量元素

删除set

使用sscan命令,每次扫描150个元素,在用srem命令每次删除一个

删除zset

使用zremrangebyrank命令每次删除150个元素

删除hash

使用hscan命令,每次获取150个字段,在用hdel命令,每次删除一个字段。这样就可以了

异步删除

redis 4.0 版本以上支持了异步删除功能

用unlink命令代替del命令来删除,这样Redis会将这个key放入到一个异步现成中进行删除,这样不会阻塞主线的运行。

好了,今天先聊到这吧,下期我们来聊一聊如何解决大key问题

欢迎大家关注我的公众号《coder练习生》

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ybb_ymm

你的鼓励会是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值