Redis BigKey问题
先来一张问题表

新闻

经过测试,使用 keys * 100W条数据也要花费16-30S,那么Redis单线程会阻塞其他命令
生产上限制key * / flushdb /flushall等危险命令
解决:
redis.conf在security这一项中配置禁用上述命令
1 | |
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/