Redis的大key和热key问题

一、Redis 大 key 问题及解决方案
1、大 key 的标准是什么
String 类型:一个 value 的字节数大于 10KB 即为大 key
Hash/Set/Zset/list 等复杂数据结构类型:一个 key 中的元素个数大于 5000 即为大 key,超过后 SLA 会下降明显,不能提供很好的性能

2、大 key 可能会导致哪些问题
内存占用 :大 Key 占用大量内存,可能导致内存不足
网络传输 :大 Key 在网络传输时会占用较多带宽,影响网络性能
阻塞操作 :对大 Key 的操作(如 DEL、EXPIRE、SMEMBERS 等)可能会阻塞 Redis 服务器,影响其他请求的处理

3、大 key 如何发现

使用内置命令 :redis-cli --hotkeys, redis-cli --bigkeys

使用开源工具 :rdb_bigkeys:工具地址

4、大 key 如何治理
拆分 大 key:结合具体业务场景,将大 key 进一步拆分为小 key,例如一个 string 大 key 拆分成多个 string 重新写入,但拆分后数据更新需要业务侧控制
压缩 大 key:对大 key 进行压缩,可使用各语言提供的压缩方法进行压缩后重新写入,压缩方法需要用户自行调研选择,通常 gzip、snappy 等都可以
开启 Proxy Cache(若有): 如果是读请求,可以考虑开启 Proxy Cache 来减少打到 Server 的请求

二、Redis 热 key 问题及解决方案
1、热 key 的标准是什么

一般是单个 key 的访问达到 5000 QPS

2、热 key 可能导致哪些问题
性能瓶颈 :高频率的请求可能导致 Redis 服务器的 CPU 和网络资源耗尽,影响整体性能
单点故障 :如果热 Key 存储在单个 Redis 实例中,该实例可能成为单点故障点

3、热 key 如何发现

业务凭借经验

使用内置命令 :redis-cli --hotkeys,redis-cli --bigkeys

使用 MONITOR 命令 :MONITOR 命令可以实时监控所有的 Redis 命令,帮助你发现访问频率高的键。可以将 MONITOR 命令的输出重定向到一个文件,然后使用脚本分析哪些键被频繁访问

使用开源工具分析

4、热 key 如何治理

设置 Localcache :结合具体业务场景,在访问 Abase 前,在业务服务侧设置 Localcache,降低访问 Abase 的qps
拆分热 key :结合具体业务场景,将 key:value 这一个热 key 复制写入多份,例如 key1:value, key2:value,访问的时候访问多个 key,但 value 是同一个,以此将 qps 分散到不同实例上,降低负载
限流策略 :使用限流算法(如令牌桶算法)限制对 hot_key 的请求频率,例如每秒最多允许 1000 次请求
开启 Proxy Cache(若有): 如果是读请求,可以考虑开启 Proxy Cache 来减少打到 Server 的请求

大佬,点个赞再走呗!

相关推荐
银发控、3 小时前
MySQL联合索引
数据库·mysql
予枫的编程笔记3 小时前
【MySQL修炼篇】从踩坑到精通:事务隔离级别的3大异常(脏读/幻读/不可重复读)解决方案
数据库·mysql·后端开发·数据库事务·事务隔离级别·rr级别·脏读幻读不可重复读
睡美人的小仙女1273 小时前
Threejs加载环境贴图报错Bad File Format: bad initial token
开发语言·javascript·redis
徐同保3 小时前
解决 Vue 3 项目 TypeScript 编译错误:@types/lodash 类型定义不兼容
redis·网络协议·https
一起养小猫4 小时前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
世界尽头与你4 小时前
(修复方案)CVE-2023-22047: Oracle PeopleSoft Enterprise PeopleTools 未授权访问漏洞
数据库·安全·oracle·渗透测试
韩立学长4 小时前
【开题答辩实录分享】以《智能大学宿舍管理系统的设计与实现》为例进行选题答辩实录分享
数据库·spring boot·后端
Henry Zhu1234 小时前
数据库(五):反规范化
数据库
Mr_Xuhhh5 小时前
MySQL函数详解:日期、字符串、数学及其他常用函数
java·数据库·sql
he___H6 小时前
Redis高级数据类型
数据库·redis·缓存