数据结构命令复杂度结果(对应 key)StringSTRLENO(1)字符串值的长度HashHLENO(1)哈希表中字段的数量ListLLENO(1)列表元素数量SetSCARDO(1)集合元素数量Sorted SetZCARDO(1)有序集合的元素数量
对于集合类型还可以使用 MEMORY USAGE 命令(Redis 4.0+) , 这个命令会返回键值对占用的内存空间 。
3、借助开源工具分析 RDB 文件 。
通过分析 RDB 文件来找出 big key 。这种方案的前提是你的 Redis 采用的是 RDB 持久化 。
【Redis大key有什么危害?如何排查和处理?】网上有现成的代码/工具可以直接拿来使用:
- redis-rdb-tools[2]:Python/ target=_blank class=infotextkey>Python 语言写的用来分析 Redis 的 RDB 快照文件用的工具
- rdb_bigkeys[3] : Go 语言写的用来分析 Redis 的 RDB 快照文件用的工具,性能更好 。
如果你用的是公有云的 Redis 服务的话,可以看看其是否提供了 key 分析功能(一般都提供了) 。
这里以阿里云 Redis 为例说明 , 它支持 bigkey 实时分析、发现,文档地址:https://www.alibabacloud.com/help/zh/apsaradb-for-redis/latest/use-the-real-time-key-statistics-feature。
文章插图
阿里云Key分析
如何处理 bigkey?bigkey 的常见处理以及优化办法如下(这些方法可以配合起来使用):
- 分割 bigkey:将一个 bigkey 分割为多个小 key 。例如,将一个含有上万字段数量的 Hash 按照一定策略(比如二次哈希)拆分为多个 Hash 。
- 手动清理:Redis 4.0+ 可以使用 UNLINK 命令来异步删除一个或多个指定的 key 。Redis 4.0 以下可以考虑使用 SCAN 命令结合 DEL 命令来分批次删除 。
- 采用合适的数据结构:例如,文件二进制数据不使用 String 保存、使用 HyperLogLog 统计页面 UV、Bitmap 保存状态信息(0/1) 。
- 开启 lazy-free(惰性删除/延迟释放) :lazy-free 特性是 Redis 4.0 开始引入的,指的是让 Redis 采用异步方式延迟释放 key 使用的内存,将该操作交给单独的子线程处理 , 避免阻塞主线程 。
推荐阅读
- 72岁的她穿旗袍配短发飒爽大气,身姿轻盈,完全看不出年龄
- 《一念关山》大结局:看懂梧帝两封遗诏,才知宁远舟为何假死遁隐
- 《亮剑》播出18年后,护士“田雨”大变样,背负巨额债务复出还债
- 52岁杨钰莹太狠了!素颜同框大3岁任静像女儿,单身果然更养人
- 零下十二度的北京,赵丽颖与表弟的“雪地大战”引发热议
- 湖北小伙被外国美女模特倒追,生下两个混血女儿,大女儿超像杨幂
- 曝汤洛雯婆婆消费情况:买名牌包不心疼,出行开大奔,还吃补品
- 王鹤棣田曦薇红毯互动超甜,《大奉》有望成爆款,棣欣引力破大防
- 混血儿也有心酸,刘烨儿子近照大变样,周华健看着比儿子还年轻
- 杀疯了!韩剧又出大爆款!《鱿鱼游戏》之后,最火的韩剧出现了