Redis BigKey问题

先来一张问题表

新闻

经过测试,使用 keys * 100W条数据也要花费16-30S,那么Redis单线程会阻塞其他命令

生产上限制key * / flushdb /flushall等危险命令

解决:

redis.conf在security这一项中配置禁用上述命令

1
2
3
rename- command keys ""
rename- command flushdb ""
rename- command flushall ""

scan命令

Redis Scan命令及其相关命令SSCAN,HSCAN,ZSCAN命令都是用于增量遍历集合中的元素

  • SCAN命令用于迭代当前数据库中的数据库键
  • SSCAN命令用于迭代SET集合中的元素
  • HSCAN命令用于迭代hash中的键值对
  • ZSCAN命令用于迭代ZSET中的元素(包括元素成员和元素分数)

使用案例

BigKey案例

问题:

多大算big?来看阿里规范

有什么危害?

内存不均,集群迁移困难

超时删除,大key删除作梗

网络流量阻塞

那么如何产生bigkey的呢?

如何发现我们的bigkey?

redis-cli –bigkeys

memory usage

如何删除bigkey?

根据不同的value类型使用不同的删除方法

  • String

一般用del,如果过于庞大使用unlink

  • hash

使用HSCAN每次获取少量field-value,再使用hdel删除每个field

然后剩下的list、set、zset都和hash一样进行渐进式删除


Redis BigKey问题
http://example.com/2023/10/22/RedisBigKey/
Author
Posted on
October 22, 2023
Licensed under