怎么样算BigKey
- string类型超过10KB
- list,hash,set,zset个数超过5000就是bigkey
哪些危害
- 内存不均,集群迁徙困难
- 超时删除,大key删除缓慢
- 网络流量阻塞
如何产生
- 社交类:某用户的粉丝列表,典型案例,粉丝逐步递增
- 汇总统计:某个报表,月日年长时间累计,导致数据量巨大
如何发现
-
redis-cli --bigkeys
- 优点:给出每种数据结构Top 1 bigkey,同时给出每种数据类型的键值个数+平均大小
- 不足:想查询大于10kb的所有key,--bigkeys参数就无能为力了,需要用到memory usage来计算每个键值的字节数
-
MEMORY USAGE [key]计算每个键值的字节数
如何删除
string
- 方法:一般用del,如果过于庞大unlink
list
- 方法:使用ltrim渐进式逐步删除,直到全部删除完成
- 命令
- 代码
hash
- 方法:使用hscan每次获取少量field-value,再使用hdel删除每个field
- 命令
- 代码
set
- 方法:使用sscan每次获取部分元素,再使用srem命令删除每个元素
- 命令
- 代码
zset
- 方法:使用zscan每次获取部分元素,再使用ZREMRANGEBYRANK命令删除每个元素
- 命令
- 代码