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

Redis大Key问题

文章目录

  • 1.什么是大key
  • 2.如何衡量大key
  • 3.大key有什么影响
  • 4.大key是如何产生的
  • 5.如何发现大key
  • 6.如何解决大key

1.什么是大key

Redis key和value的最大限制都是512M,超过了Redis会拒绝这个操作,并返回一个错误信息给客户端。例如,可能会收到类似ERR key too big的消息,具体的错误信息可能依据Redis版本的不同而有所变化。
但我们这里讨论的大key是指的value很大,并不是value很大。虽然key大也会引起同样的问题,但是实际使用中,key作为一个标识一般不会很大,而value具体存一些热点数据,用户详情、商品详情等,可以能会比较大。

2.如何衡量大key

没有统一衡量标准,需要结合具体业务场景和性能需求。例如大key是否导致带宽承受不住、tps达不到、cpu利用率飙升、内存不够等。
比如你的业务需要Redis支持100tps,每个value 1M。那么需要的带宽: 100 * 1M 1024 *8 MBs,看看你的带宽是否支持,如果支持不了,那就是大key了。
举例衡量:
对于 String 类型的 Value 值,值超过 10MB(数据值太大)。对于 Set 、 ZSet、List、Hash类型的 Value 值,含有的成员数量为 10000 个(成员数量多)或成员总大小超过100M。

3.大key有什么影响

1. redis工作线程阻塞/客户端超时阻塞
redis是单线程执行命令的,当操作一个大key时(例如删除、获取或更新),这个操作会占用主线程较长时间,导致其他客户端请求被阻塞,进而引起响应时间上升和超时。
2. 网络阻塞
大key在网络传输过程中会产生较大的流量,特别是对于频繁访问的大key,可能会占满带宽,导致网络拥塞。
3. 内存占用不均
在集群模式下,如果大key存到了某个节点上,那么这个节点的内存与其他节点相比,可能会被更多的占用。
4. 负载均衡不均
当操作一个大Key时(例如删除、获取或更新),这个操作会占用主线程较长时间、占用较多带宽,表现就是节点负载比较大。

4.大key是如何产生的

1. 技术设计不当
如把redis集合 List当消息队列用,生成速度又大于消费速度,导致List元素堆积过多。
2. 未切分处理
通过单个key来存储过多的信息,比如一个key对应一个用户的全部会话信息,而没有进行适当的分割。

5.如何发现大key

1. 使用 redis-cli 的 --bigkeys 参数

redis-cli --bigkeys

这个命令会遍历整个数据库,并输出一些统计信息,包括每个数据类型的最大的几个key。这是一个简单直接的方式,但是请注意它会在生产环境中产生一定的负载,尤其是在数据库规模较大的情况下。
2. 使用第三方工具等等

6.如何解决大key

1. 清理集合中的无效数据
把不用的元素主动移除、或者设置过期时间。
2. 压缩对应的大 key 的 Value
3. 针对大 key 进行拆分
用多个key把value拆分存。如存整个用户信息 【key: userId value: userInfo】,userInfo可以切分为 【userId-name: nameInfo】、【userId-age : ageInfo】等

http://www.dtcms.com/a/266118.html

相关文章:

  • 【PyCharm 2025.1.2配置debug】
  • React Tailwind css 大前端考试、问卷响应式模板
  • Robot---能打羽毛球的机器人
  • Linux: perf report数据对比,python
  • Java的SpringAI+Deepseek大模型实战之会话记忆
  • MySQL 8.0 OCP 1Z0-908 题目解析(19)
  • 基于SpringBoot+Vue的电影售票系统(协同过滤算法)
  • 【数据安全】连续数据突升检测
  • 优化Facebook广告投放的五大关键策略
  • 全双工和半双工在以太网报文收发过程中的核心区别
  • AMD-R9-9950X 和 微星B850M-MORTAR-WIFI主板 简单开箱测评
  • [自然语言处理]汉语文本分词
  • Odoo 中国特色高级工作流审批模块研发
  • 页面登录数据的加密(前端+后端)
  • 使用pdf box去水印
  • 搜索选择DFS还是BFS
  • NumPy-核心函数transpose()深度解析
  • 【HarmonyOS】HAR和HSP循环依赖和依赖传递问题详解
  • 二叉树展开为链表C++
  • 20.数据同步Mysql-ES解决方案
  • 网络编程学习路线图
  • 如何配置core dump生成
  • Android App冷启动流程详解
  • webrtc-streamer视频流播放(rstp协议h264笔记)
  • 新人如何入门学习 STM32?
  • Stata如何做机器学习?——SHAP解释框架下的足球运动员价值驱动因素识别:基于H2O集成学习模型
  • Selenium 自动化测试中跳过机器人验证的完整指南:能用
  • 1688 Agent Russia 丨俄罗斯淘宝代购1688代采集运系统搭建指南介绍
  • 8分钟讲完 Tomcat架构及工作原理
  • Vue如何处理数据、v-HTML的使用及总结