当前位置: 首页 > article >正文

【Redis】大key问题详解

目录

  • 1、什么是大key
  • 2、大key的危害
    • 【1】阻塞风险
    • 【2】网络阻塞
    • 【3】内存不均
    • 【4】持久化问题
  • 3、如何发现大key
    • 【1】使用内置命令
    • 【2】使用memory命令(Redis 4.0+)
    • 【3】使用scan命令
    • 【4】监控工具
  • 4、解决方案
    • 【1】拆分大key
    • 【2】使用合适的数据结构
    • 【3】设置过期时间
    • 【4】渐进式删除
    • 【5】客户端缓存
  • 5、最佳实践
    • 【1】设计阶段预防
    • 【2】监控告警
    • 【3】读写优化

1、什么是大key

在redis中,大key通常指以下三种情况之一:

1、value过大:单个key的value体积过大(如字符串值超过10KB,集合/列表/哈希/有序集合元素过多)
2、元素过多:集合类型(hash/list/set/zset)中包含大量元素(如超过5000个元素)
3、结构复杂:key对应的数据结构嵌套过深或过于复杂

2、大key的危害

【1】阻塞风险

1、大key的读写操作会消耗更多CPU和内存。
2、可能会导致redis阻塞,影响其他请求的响应时间。

【2】网络阻塞

1、大key传输会占用大量带宽。
2、可能会导致集群节点间同步延迟。

【3】内存不均

1、在集群模式下,大key会导致数据分片不均衡。
2、可能造成某些节点内存压力过大。

【4】持久化问题

1、AOF重写和RDB生成时处理大key会变慢。
2、可能导致持久化失败或服务暂停。

3、如何发现大key

【1】使用内置命令

redis-cli --bigkeys #扫描并统计大key

【2】使用memory命令(Redis 4.0+)

MEMORY USAGE key_name #查看指定key的内存使用

【3】使用scan命令

redis-cli --scan --pattern '*' | while read key; do echo "$key: $(redis-cli memory usage "$key")"; done

【4】监控工具

1、RedisInsight
2、Redis Desktop Manager

4、解决方案

【1】拆分大key

1、将大hash拆分成多个小hash
2、对大list/set进行分片

【2】使用合适的数据结构

1、根据合适的业务场景使用合适的数据结构

【3】设置过期时间

1、EXPIRE key seconds

【4】渐进式删除

1、对大key删除,使用UNLINK代替DEL(非阻塞)
2、对集合类型,分批删除

【5】客户端缓存

1、对不常变更的大key使用客户端缓存

5、最佳实践

【1】设计阶段预防

1、预估数据规模,提前设计合理的key结构
2、避免单个key存储过多数据

【2】监控告警

1、设置大key监控告警
2、定期扫描和清理

【3】读写优化

1、对大key使用pipeline减少网络往返
2、避免对大key进行范围操作

http://www.lryc.cn/news/2394305.html

相关文章:

  • 【数据结构】——二叉树--链式结构
  • TKernel模块--杂项
  • 充电便捷,新能源汽车移动充电服务如何预约充电
  • laya3的2d相机与2d区域
  • 2024 CKA模拟系统制作 | Step-By-Step | 19、题目搭建-升级集群
  • 47道ES67高频题整理(附答案背诵版)
  • Lauterbach TRACE32专栏
  • 基于 Chrome 浏览器扩展的Chroma简易图形化界面
  • python打卡day41
  • IM系统的负载均衡
  • 前端八股 tcp 和 udp
  • 使用 Zabbix 监控 MySQL 存储空间和性能指标的完整实践指南
  • 【技能拾遗】——家庭宽带单线复用布线与配置(移动2025版)
  • 异步日志监控:FastAPI与MongoDB的高效整合之道
  • 在 Android 上备份短信:保护您的对话
  • 标题:2025海外短剧爆发年:APP+H5双端系统开发,解锁全球流量与变现新大陆
  • 解决RAGFlow(v0.19.0)有部分PDF无法解析成功的问题。
  • c#基础08(数组)
  • 嵌入式学习--江协stm32day3
  • docker-记录一次容器日志<container_id>-json.log超大问题的处理
  • 4.8.1 利用Spark SQL实现词频统计
  • 头歌java课程实验(Java面向对象 - 包装类)
  • 经济法-7-上市公司首次发行、配股增发条件
  • PyTorch中nn.Module详解
  • Mac 每日磁盘写入量异常高
  • 《深入解析Go语言结构:简洁高效的工程化设计》
  • [蓝桥杯]机器人塔
  • 如何将vue2使用npm run build打包好的文件上传到服务器
  • Ubuntu 22.04 系统下 Docker 安装与配置全指南
  • 动态表单开发避坑:改变input的值不会触发change事件即时修复策略-WdatePicker ——仙盟创梦IDE