Redis大key

Redis大key基本概念,影响

Redis 大 key 指在 Redis 中存储了大量数据的键,它会对 Redis 的性能和内存管理产生影响。

大key的定义与value的大小和元素数量有关,但这个定义并不是绝对的,而是相对的,具体取决于系统的使用场景和性能要求。大 key 通常有以下两种情况:

  • Value 存储占用空间大
  • 集合类型的Key中元素过多
    !\[Pasted image 20250227151208.png]
    造成的影响如下:

1.内存分布不均:大key占用过多的内存,可能导致Redis示例内存不足,触发淘汰策略或内存不足

2.阻塞请求:对大key的操作可能耗时过长,阻塞redis单线程,影响其他请求的响应时间

3.网络阻塞:读取大key时,返回的数据包过大,可能占满网络带宽,影响其他服务通信

4.持久化问题:大Key在生成RDB快照或AOF重写时会导致I/O压力增大,甚至引发服务暂停。

5.集群倾斜:在Redis集群中,大key可能导致某个分片负载过高,破坏数据均衡性。

Redis 大key是如何产生的

1、数据结构使用不当:将Redis用在不合适其能力的场景,如使用string类型存储大体积二进制文件或富文本数据。

2、业务设计不合理:没有对key中的成员进行合理拆分,导致个别key中的成员数量过多

3、未及时清理垃圾数据:没有定期清理无效数据

4、对业务预估不准确:业务上线前规划设计不足,为预见value的动态增长问题

5、过期时间设置不当:未给key设置过期时间或过期时间过长,导致value数量累积。

等等

Redis 大key如何检测

使用redis-cli --bigkeys

!\[Pasted image 20250227162153.png]

增加内存&流量&超时等指标监控

由于大key的value很大,执行读取时可能阻塞线程,这样Redis整体的每秒查询率会下降,并且客户端超时会增加,网络带宽会上涨,配置这些报警监控有助于我们发现大key的存在。

使用redis-rdb-tools离线文件分析工具

!\[Pasted image 20250227163346.png]

使用脚本扫描

编写脚本定期扫描redis的key,检查每个key中value的大小

Redis 大key如何处理

!\[Pasted image 20250227163630.png]

渐进式删除

  • 在Redis 4.0之前的版本中,由于没有提供异步删除的功能,删除大key可能会阻塞Redis的主线程,影响性能。因此,推荐使用渐进式删除,即逐步删除key中的元素,以减少对性能的影响。

惰性删除

  • 从Redis 4.0开始,引入了UNLINK命令,它支持异步删除key。这种方式称为惰性删除,因为它允许Redis在后台异步地删除key,从而减少对主线程的阻塞,提高性能。

value压缩:

  • 对存储在大key中的value进行压缩,以减少存储空间的占用。这可以通过使用压缩算法(如gzip、zlib等)来实现。压缩后的数据在读取时需要解压缩,可能会增加一些CPU开销,但可以显著减少内存使用。

value拆分:

  • 将大key中的value拆分成多个小的value,存储在不同的key中。这样可以减少单个key的大小,提高操作的灵活性和性能。拆分后,可以通过多个key来管理和访问原始数据。
相关推荐
名不经传的养虾人13 分钟前
从0到1:企业级AI项目迭代日记 Vol.65|最危险的故障不是崩溃,是悄悄换掉了正确答案
数据库·人工智能·ai编程·ai-agent·企业ai
程序员佳佳17 分钟前
模型网关灰度不是调百分比:把放量、观测和回滚做成账本
java·数据库·人工智能·redis·gpt·aigc·embedding
绩隐金22 分钟前
用AI开了本小说 九折归潮
数据库
heimeiyingwang24 分钟前
【架构实战】MySQL索引优化:从慢查询到毫秒响应
数据库·mysql·架构
得闲喝茶25 分钟前
跨表数据匹配——VLOOKUP、XLOOKUP
大数据·数据库·笔记·信息可视化·数据分析·excel
snow@li41 分钟前
数据库:如何设计最佳索引 / 数据库最佳索引设计指南
数据库
渣渣灰飞1 小时前
MySQL 系统学习 第二阶段 第四章:DCL(Data Control Language)第二节:权限管理与角色(Role)
数据库·学习·mysql
肖永威1 小时前
金仓数据库麒麟环境SQL终端使用入门实践(增删改查篇)
数据库·sql·金仓数据库
m0_715674432 小时前
2026年医疗行业数据库风险监测产品综合能力排名分析
网络·数据库
渣渣灰飞2 小时前
MySQL 系统学习 第四阶段:MySQL 高级 第一节:索引(Index)
数据库·学习·mysql