多大算big?
参照<<阿里云开发手册>>可知,String类型 >= 10kb 就是bigkey;list、hash、zset、set元素个数超过5000个就是bigkey
有哪些危害?
-
内存不均,集群迁移困难;
-
超时删除,大key删除惹的祸;
-
网络流量阻塞。
如何产生?
举两个例子
-
社交类:某明星的粉丝列表,粉丝关注人数逐渐增多
-
汇总统计:某个报表,月积日累的积累
如何发现
-
在登陆的时候使用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来计算每个键值的字节数
-
-
使用MEMORY USAGE命令
如何删除?
首先看一下<<阿里云的开发手册>>对这方面怎么说
-
string:一般用del,如果过于庞大使用unlink进行异步删除
-
hash:建议使用hscan每次获取少量field-value,再使用hdel删除每个field;接下来看看阿里手册建议删除方法的Java代码
-
list:使用ltrim渐进式逐步删除,直到全部删除完成;接下来是阿里手册的代码
-
set:使用sscan每次获取部分元素,再使用srem命令删除每个元素;老规矩,看阿里手册代码
-
zset:使用zscan每次获取部分元素,再使用ZREMRANGEBYRANK命令删除每个元素;老规矩,上代码