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

缓存大key如何解决

一:什么是缓存大key

通常来说,如果一个 Key 本身特别大(超过 5M 的字符串),或者它包含特别多的元素(超过 2w 长度的 List),那么这个 Key 就可以认为是一个大 Key。。(比如单个简单的key存储的value很大、hash, set,zset,list 中存储过多的元素)

二:缓存大key有啥风险

redis是单线程运行的,如果一次操作的value很大会对整个redis的响应时间造成负面影响。大 Key 会占用更多的内存,会在请求时占用更多的带宽,阻塞 Redis 的主线程,在集群环境中还会造成数据倾斜

三:如何发现缓存大key

1、通过redis-cli客户端通过slowlog get指令获取最新慢查询命令,大部分是疑似大key

2、redis-cli --bigkeys命令。可以找到某个实例5种数据类型(String、hash、list、set、zset)的最大key。

  • redis-cli -p 6379 --bigkeys

四:缓存大key如何治理

具体如何实施,请看下面例子:

1)单个 key 存储大 value

将对象hash拆分成多个key-value,使用multiGet获取值,这样分拆意义在于分拆操作的压力,将操作压力平摊到多个redis实例,降低对于单个redis的io压力。

将对象存储在一个hash中,每个field代表具体属性,使用hget,hmget来获取部分value,使用hset,hmset来更新部分属性。

现象:单个简单的key存储着复杂且内存大的value 对象

措施:将对象拆成几个key-value,mget,mset 操作替代原本方法,将数据平摊到多个redis实例上。

示例:

原始数据:

<


http://www.kler.cn/a/409053.html

相关文章:

  • 《图像梯度与常见算子全解析:原理、用法及效果展示》
  • 前端速通(CSS)
  • Vue进阶面试题(三)
  • LSA1类和2类区别
  • postgresql按照年月日统计历史数据
  • 通过DataWorks实现MaxCompute跨项目迁移
  • 基于Java Springboot餐饮美食分享平台
  • 【隐私计算大模型】联邦深度学习之拆分学习Split learning原理及安全风险、应对措施以及在大模型联合训练中的应用案例
  • BLIP-2模型的详解与思考
  • Docker+PostgreSQL数据库
  • java: itext8.05 create pdf
  • 初始Python篇(7)—— 正则表达式
  • 【Y20030005】Java+JSP+MySQL+Servlet的网络购物商城的设计与实现
  • RK3588适配MTK7921 USB接口WiFi驱动开发
  • mini-lsm通关笔记Week2Day5
  • 扩散模型中IGSO(3)分布PDF的近似表示
  • 鸿蒙学习高效开发与测试-集成开发环境(4)
  • 网络安全,文明上网(4)掌握网络安全技术
  • 代码随想录算法训练营第五十三天|Day53 图论
  • AIVA 技术浅析(四):捕捉音乐作品中的长期依赖关系
  • C#构建一个简单的循环神经网络,模拟对话
  • 【代码pycharm】动手学深度学习v2-07 自动求导
  • C语言-详细讲解-P1217 [USACO1.5] 回文质数 Prime Palindromes
  • 【C++】list模拟实现(详解)
  • css:感觉稍微高级一点的布局
  • SpringBoot社团管理:安全与维护