目录

  • 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.pswp.cn/pingmian/83323.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/83323.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/83323.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis核心知识点

Redis是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存,消息队列、分布式锁等场景。 Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 Lis…

vscode不满足先决条件问题的解决——vscode的老版本安装与禁止更新(附安装包)

目录 起因 vscode更新设置的关闭 安装包 结语 起因 由于主包用的系统是centos的,且版本有点老了,再加上vscode现在不支持老版本的,这对主包来说更是雪上加霜啊 但是主包看了网上很多教程,眼花缭乱,好多配置要改&…

如何成为一名优秀的产品经理(自动驾驶)

一、 夯实核心基础 深入理解智能驾驶技术栈: 感知: 摄像头、雷达(毫米波、激光雷达)、超声波传感器的工作原理、优缺点、融合策略。了解目标检测、跟踪、SLAM等基础算法概念。 定位: GNSS、IMU、高精地图、轮速计等定…

【ISAQB大纲解读】信息隐藏指的是什么

在软件架构中,信息隐藏(Information Hiding) 是核心设计原则之一,由 David Parnas 在 1972 年提出。它强调通过限制对模块内部实现细节的访问,来降低系统复杂度、提高可维护性和可扩展性。在 ISAQB 的学习目标&#xf…

网页前端开发(基础进阶2--JS)

前面学习了html与css,接下来学习JS(JavaScript与Java无关)。 web标准(网页标准)分为3个部分: 1.html主要负责网页的结构(页面的元素和内容) 2.css主要负责网页的表现(…

完全移除内联脚本

说明 日期&#xff1a;2025年5月9日。 内联脚本给跨站脚本攻击&#xff08;XSS&#xff09;留了条路。 示例 日期&#xff1a;2025年5月9日。 如下网页文件a.html&#xff1a; <!-- 内联脚本块 --> <script> function handleClick{ alert("Hello")…

[蓝桥杯]约瑟夫环

约瑟夫环 题目描述 nn 个人的编号是 1 ~ nn&#xff0c;如果他们依编号按顺时针排成一个圆圈&#xff0c;从编号是 1 的人开始顺时针报数。 &#xff08;报数是从 1 报起&#xff09;当报到 kk 的时候&#xff0c;这个人就退出游戏圈。下一个人重新从 1 开始报数。 求最后剩…

电子电气架构 --- 如何应对未来区域式电子电气(E/E)架构的挑战?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

isp中的 ISO代表什么意思

isp中的 ISO代表什么意思 在摄影和图像信号处理&#xff08;ISP&#xff0c;Image Signal Processor&#xff09;领域&#xff0c;ISO是一个用于衡量相机图像传感器对光线敏感度的标准参数。它最初源于胶片摄影时代的 “国际标准化组织&#xff08;International Organization …

第十二节:第五部分:集合框架:Set集合的特点、底层原理、哈希表、去重复原理

Set系列集合特点 哈希值 HashSet集合的底层原理 HashSet集合去重复 代码 代码一&#xff1a;整体了解一下Set系列集合的特点 package com.itheima.day20_Collection_set;import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; import java.util.…

迈向分布式智能:解析MCP到A2A的通信范式迁移

智能体与外部世界的桥梁之言&#xff1a; 在深入探讨智能体之间的协作机制之前&#xff0c;我们有必要先厘清一个更基础的问题&#xff1a;**单个智能体如何与外部世界建立连接&#xff1f;** 这就引出了我们此前介绍过的 **MCP&#xff08;Model Context Protocol&…

Android Studio 配置之gitignore

1.创建或编辑.gitignore文件 在项目根目录下检查是否已有.gitignore文件。如果没有&#xff0c;创建一个新文件&#xff0c;命名为.gitignore&#xff08;注意文件名前有个点&#xff09;。 添加忽略规则&#xff1a;在.gitignore中添加以下内容&#xff1a; 忽略整个 .idea …

算法:二分查找

1.二分查找 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 二分查找算法要确定“二段性”&#xff0c;时间复杂度为O(lonN)。为了防止数据溢出&#xff0c;所以求mid时要用防溢出的方式。 class Solution { public:int search(vector<int>& nums, int tar…

day62—DFS—太平洋大西洋水流问题(LeetCode-417)

题目描述 有一个 m n 的矩形岛屿&#xff0c;与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界&#xff0c;而 “大西洋” 处于大陆的右边界和下边界。 这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights &#xff0c; hei…

Langchaine4j 流式输出 (6)

Langchaine4j 流式输出 大模型的流式输出是指大模型在生成文本或其他类型的数据时&#xff0c;不是等到整个生成过程完成后再一次性 返回所有内容&#xff0c;而是生成一部分就立即发送一部分给用户或下游系统&#xff0c;以逐步、逐块的方式返回结果。 这样&#xff0c;用户…

自动驾驶与智能交通:构建未来出行的智能引擎

随着人工智能、物联网、5G和大数据等前沿技术的发展&#xff0c;自动驾驶汽车和智能交通系统正以前所未有的速度改变人类的出行方式。这一变革不仅是技术的融合创新&#xff0c;更是推动城市可持续发展的关键支撑。 一、自动驾驶与智能交通的定义 1. 自动驾驶&#xff08;Auto…

数据基座觉醒!大数据+AI如何重构企业智能决策金字塔(下)

1. 数据架构的量子跃迁 1.1 从线性堆叠到立体网络 传统六层架构正在经历基因重组。某智能家居企业将数据流转路径重构为三维拓扑网络后&#xff0c;新品研发周期从18个月压缩至9个月。这个改造的核心在于打破数据层间的物理隔离&#xff0c;让原始数据流能直接触达决策中枢。…

Linux 脚本文件编辑(vim)

1. 用户级配置文件&#xff08;~/.bashrc&#xff09; vim ~/.bashrc # 编辑 source ~/.bashrc # 让编辑生效 ~/.bashrc 文件是 Bash Shell 的配置文件&#xff0c;用于定义用户登录时的环境变量、别名、函数等设置。当你修改了 ~/.bashrc 文件后&#xff0c;通常需要重新…

【Pytorch学习笔记】模型模块06——hook函数

hook函数 什么是hook函数 hook函数相当于插件&#xff0c;可以实现一些额外的功能&#xff0c;而又不改变主体代码。就像是把额外的功能挂在主体代码上&#xff0c;所有叫hook&#xff08;钩子&#xff09;。下面介绍Pytorch中的几种主要hook函数。 torch.Tensor.register_h…

SQL进阶之旅 Day 11:复杂JOIN查询优化

【SQL进阶之旅 Day 11】复杂JOIN查询优化 在数据处理日益复杂的今天&#xff0c;JOIN操作作为SQL中最强大的功能之一&#xff0c;常常成为系统性能瓶颈。今天我们进入"SQL进阶之旅"系列的第11天&#xff0c;将深入探讨复杂JOIN查询的优化策略。通过本文学习&#xf…