1. 多大的key才算是bigkey?
- 通常说的bigkey 不是只key多大,而是key对应的value值很大
2. bigkey的危害
- 网络传输延迟:当从Redis服务器读取或写入大键时,需要更多的时间和网络带宽来传输数据。这可能会导致响应时间延长,影响性能。
- 数据处理效率降低:对大键进行读写操作可能会导致Redis服务器的处理速度变慢,因为它需要花费更多的时间来处理大量的数据。
- 持久化备份问题:如果你使用了持久化功能(如RDB快照或AOF日志),大键会增加备份和恢复的时间和存储空间。
- 缓存失效问题:如果大键被频繁更新,可能会导致与该键相关的其他缓存项失效,影响缓存系统的效率。
3.如何产生
- 社交类: 明星粉丝列表,典型案例粉丝逐步递增
- 汇总统计: 某个报表,日月年经年累计
4.如何删除
- String 类型 一般用del,如果过于庞大使用unlink key 删除
- Hash 每次获取少量的key, 在根据key删除value
- list 使用渐进式删除, 直到全部删完
- set类型:使用sscan每次获取部分元素,再使用srem命令删除每个元素
- 使用zscan每次获取部分元素,在使用zremrangebyrank命令删除每个元素
5. 如何发现
redis-cli --bigkeys
- 好处
- 给出每种数据结构Top 1 bigkey,同时给出每种数据类型的键值个数+平均大小
- 不足
- 想查询大于10kb的所有key,–bigkeys参数就无能为力了,需要用到memory usage来计算每个键值的字节数
memory usage
计算每个键值的字节数
6、BigKey调优,惰性释放lazyfree
打开redis.conf配置文件LAZY FREEING相关说明
1、lazyfree-lazy-server-del no: 这个选项用于控制Redis服务器删除键时的行为。当设置lazyfree-lazy-server-del选项为no时,服务器会立即删除键,而不延迟删除操作。
2、replica-lazy-flush no: 这个选项用于控制主节点执行FLUSHALL或FLUSHDB命令时是否传播给从节点。当设置了replica-lazy-flush选项为no时,主节点执行这些命令后会将其传播给从节点,使得从节点也执行相同的操作。
3、lazyfree-lazy-user-del no: 这个选项用于控制Redis服务器删除键时的行为,与lazyfree-lazy-server-del选项类似。当设置了lazyfree-lazy-user-del选项为no时,服务器会立即删除键,而不延迟删除操作。