Redis的BigKey问题

本文探讨了Redis中BigKey的概念,涉及其产生的原因(如社交类应用的粉丝列表),危害(内存不均、网络流量等),检测方法(Redis-cli--bigkeys),以及不同数据结构(如string、hash、list、set和zset)的处理建议。着重介绍了如何发现和删除BigKey,以及阿里云开发手册的指导。
摘要由CSDN通过智能技术生成

多大算big?

参照<<阿里云开发手册>>可知,String类型 >= 10kb 就是bigkeylist、hash、zset、set元素个数超过5000个就是bigkey

有哪些危害?

  • 内存不均,集群迁移困难;

  • 超时删除,大key删除惹的祸;

  • 网络流量阻塞。

如何产生?

举两个例子

  1. 社交类:某明星的粉丝列表,粉丝关注人数逐渐增多

  2. 汇总统计:某个报表,月积日累的积累

如何发现

  1. 在登陆的时候使用redis-cli --bigkeys命令,还可以加一个-i的参数,指定休眠时间,例如redis-cli -h 127.0.0.1 -p 7001 –-bigkeys -i 0.1每隔 100 条 scan 指令就会休眠 0.1s,ops 就不会剧烈抬升,但是扫描的时间会变长

    • 好处

    • 给出每种数据结构Top 1 bigkey,同时给出每种数据类型的键值个数+平均大小

    • 不足

    • 想查询大于10kb的所有key,--bigkeys参数就无能为力了,需要用到memory usage来计算每个键值的字节数

  2. 使用MEMORY USAGE命令

如何删除?

首先看一下<<阿里云的开发手册>>对这方面怎么说

  • string:一般用del,如果过于庞大使用unlink进行异步删除

  • hash:建议使用hscan每次获取少量field-value,再使用hdel删除每个field;接下来看看阿里手册建议删除方法的Java代码

  • list:使用ltrim渐进式逐步删除,直到全部删除完成;接下来是阿里手册的代码

  • set:使用sscan每次获取部分元素,再使用srem命令删除每个元素;老规矩,看阿里手册代码

  • zset:使用zscan每次获取部分元素,再使用ZREMRANGEBYRANK命令删除每个元素;老规矩,上代码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值