redis热key

在 Redis 中,热 Key(Hot Key) 是指被频繁访问的 Key,可能会导致以下问题:

  • 性能瓶颈:单个 Redis 实例的 CPU 或网络带宽被耗尽。

  • 数据倾斜:在 Redis 集群中,热 Key 可能导致某个节点的负载过高。

  • 缓存击穿:热 Key 过期或被删除时,大量请求直接打到数据库,导致数据库压力骤增。

以下是处理热 Key 的常见方法和最佳实践:


1. 检测热 Key

1.1 使用 Redis 自带的命令
  • redis-cli --hotkeys(Redis 6.0 及以上版本):

    • 扫描 Redis 实例中的热 Key。

    • 示例:

      bash

      redis-cli --hotkeys
  • MONITOR 命令

    • 实时监控 Redis 的命令执行情况,找出频繁访问的 Key。

    • 示例:

      bash

      redis-cli MONITOR
1.2 使用第三方工具
  • Redis 慢查询日志

    • 通过分析慢查询日志,找出频繁访问的 Key。

    • 配置慢查询日志:

      bash

      CONFIG SET slowlog-log-slower-than 1000  -- 记录超过 1ms 的查询
      CONFIG SET slowlog-max-len 1000         -- 最多记录 1000 条慢查询
      SLOWLOG GET                             -- 查看慢查询日志
  • 监控工具

    • 使用 Prometheus、Grafana 等监控工具,分析 Redis 的访问模式。


2. 处理热 Key 的方法

2.1 本地缓存
  • 在应用层缓存热 Key 的数据

    • 使用本地缓存(如 Guava Cache、Caffeine)缓存热 Key 的数据,减少对 Redis 的访问。

    • 示例:

      java

      Cache<String, String> localCache = Caffeine.newBuilder().maximumSize(1000).expireAfterWrite(10, TimeUnit.MINUTES).build();String value = localCache.get(key, k -> redis.get(k));
2.2 拆分热 Key
  • 将热 Key 拆分为多个子 Key

    • 例如,将一个热 Key 拆分为多个子 Key,分散访问压力。

    • 示例:

      bash

      # 原始 Key
      GET hotkey# 拆分后的 Key
      GET hotkey:part1
      GET hotkey:part2
      GET hotkey:part3
2.3 使用 Redis 集群
  • 将热 Key 分散到多个 Redis 实例

    • 在 Redis 集群中,使用哈希标签(Hash Tag)将热 Key 分散到多个节点。

    • 示例:

      bash

      # 使用哈希标签
      SET {hotkey}:part1 value1
      SET {hotkey}:part2 value2
      SET {hotkey}:part3 value3
2.4 限流和降级
  • 对热 Key 的访问进行限流

    • 使用限流算法(如令牌桶、漏桶)限制对热 Key 的访问频率。

    • 示例:

      java

      RateLimiter rateLimiter = RateLimiter.create(100);  // 每秒允许 100 次访问
      if (rateLimiter.tryAcquire()) {String value = redis.get(hotkey);
      } else {// 降级处理
      }
  • 降级处理

    • 当热 Key 的访问压力过大时,返回默认值或错误信息,避免系统崩溃。

2.5 异步更新缓存
  • 使用异步任务更新热 Key

    • 当热 Key 过期时,使用异步任务更新缓存,避免大量请求直接打到数据库。

    • 示例:

      java

      String value = redis.get(hotkey);
      if (value == null) {executor.submit(() -> {String dbValue = loadFromDatabase(hotkey);redis.set(hotkey, dbValue);});value = getDefaultValue();
      }
2.6 设置合理的过期时间
  • 避免热 Key 同时过期

    • 为热 Key 设置随机的过期时间,避免大量 Key 同时过期导致缓存击穿。

    • 示例:

      java

      int ttl = 3600 + new Random().nextInt(600);  // 过期时间在 3600~4200 秒之间
      redis.setex(hotkey, ttl, value);

3. 预防热 Key 的产生

  • 设计时考虑访问模式

    • 在设计系统时,预估数据的访问模式,避免单个 Key 被频繁访问。

  • 使用多级缓存

    • 结合本地缓存和分布式缓存,减少对 Redis 的直接访问。

  • 监控和预警

    • 实时监控 Redis 的访问情况,及时发现和处理热 Key。


4. 总结

  • 检测热 Key:使用 redis-cli --hotkeysMONITOR 命令或监控工具。

  • 处理热 Key:本地缓存、拆分热 Key、使用 Redis 集群、限流和降级、异步更新缓存。

  • 预防热 Key:设计时考虑访问模式,使用多级缓存,监控和预警。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/72660.shtml

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

相关文章

宇树科技嵌入式面试题及参考答案(春晚机器人的公司)

目录 设计一个带看门狗(Watchdog)的嵌入式系统,描述故障恢复流程 在资源受限的 MCU 上实现 OTA 升级功能,描述关键设计点 如何实现 OTA(空中升级)功能?描述固件校验和回滚机制的设计要点 推挽输出与开漏输出的区别?举例说明其在 GPIO 控制中的应用 UART、SPI、I2C …

Axure常用变量及使用方法详解

点击下载《Axure常用变量及使用方法详解.pdf》 摘要 Axure RP 作为一款领先的前端原型设计工具&#xff0c;提供了全面的 变量 和 函数 系统&#xff0c;以支持复杂的交互设计和动态内容展示。本文将从专业角度详细解析 Axure 中的 全局变量、中继器数据集变量/函数、元件变量…

SpringBoot - 用责任链模式实现业务编排

文章目录 前因责任链&#xff1a;像工作台一样组织代码CodeSEQ3.1 定义处理器规范3.2 实现具体处理器3.3 共享上下文3.4 组装责任链 适用场景优势 前因 2000多行的业务逻辑里&#xff0c;各种校验规则、促销计算、库存操作像意大利面条一样缠绕在一起。最要命的是这样的代码结…

upload-labs详解(13-20)文件上传分析

目录 upload-labs-env upload-labs-env第十三关 文件包含漏洞 代码 测试 上传一个.jpg图片 上传一个.png文件 上传一个.gif图片 upload-labs-env第十四关 代码 思路 upload-labs-env第十五关 代码 思路 upload-labs-env第十六关 代码 思路 测试 上传gif格式…

网络安全通信架构图

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在安全通信里面我经常听到的2个东西就是SSL和TLS&#xff0c;这2个有什么区别呢&#xff1f;以及HTTPS是怎么通信的&#xff1f;包括对称加密、非对称加密、摘要、…

Java中的String类

目录 1. String类的重要性 2. 常用方法 2.1 字符串构造 2.2 String对象的比较 2.3 字符串查找 2.4 转化 2.5 字符串替换 2.6 字符串拆分 2.7 字符串截取 2.8 其他操作方法 2.9 字符串的不可变性 2.10 字符串修改 3. StringBuilder和StringBuffer 3.1 StringBuilde…

深度分页介绍及优化建议

深度分页介绍 查询偏移量过大的场景我们称为深度分页&#xff0c;这会导致查询性能较低&#xff0c;例如&#xff1a; # MySQL 在无法利用索引的情况下跳过1000000条记录后&#xff0c;再获取10条记录 SELECT * FROM t_order ORDER BY id LIMIT 1000000, 10 深度分页问题的原…

live555推流服务器异常

1.后端异常信息&#xff1a; MultiFramedRTPSink::afterGettingFrame1(): The input frame data was too large for our buffer size (100176). 48899 bytes of trailing data was dropped! Correct this by increasing "OutPacketBuffer::maxSize" to at least m…

每日OJ_牛客_宵暗的妖怪_DP_C++_Java

目录 牛客_宵暗的妖怪_DP 题目解析 C代码 Java代码 牛客_宵暗的妖怪_DP 宵暗的妖怪 描述&#xff1a; 露米娅作为宵暗的妖怪&#xff0c;非常喜欢吞噬黑暗。这天&#xff0c;她来到了一条路上&#xff0c;准备吞噬这条路上的黑暗。这条道路一共被分为n 部分&…

20250306-笔记-精读class CVRPEnv:step(self, selected)

文章目录 前言一、if self.time_step<4:控制时间步的递增判断是否在配送中心特定时间步的操作更新更新当前节点和已选择节点列表更新需求和负载更新访问标记更新负无穷掩码更新步骤状态&#xff0c;将更新后的状态同步到 self.step_state 二、使用步骤总结 前言 class CVRP…

Flowable 基本入门

flowable.7z官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 1、Flowable介绍 Flowable是BPMN的一个基于java的软件实现&#xff0c;不过Flowable不仅仅包括BPMN&#xff0c;还有DMN决策表和CMMN Case管理引擎&#xff0c;并且有自己的用户管理、微服务API等一系列功能&a…

完全背包-一维数组

52. 携带研究材料&#xff08;第七期模拟笔试&#xff09; 题目描述 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。他需要带一些研究材料&#xff0c;但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和…

景联文科技:以专业标注赋能AI未来,驱动智能时代的精准跃迁

在人工智能技术重塑全球产业格局的今天&#xff0c;高质量训练数据已成为驱动算法进化的核心燃料。作为数据智能服务领域的领军者&#xff0c;景联文科技深耕数据标注行业多年&#xff0c;以全栈式数据解决方案为核心&#xff0c;构建起覆盖数据采集、清洗、标注、质检及算法调…

洛谷B2074 计算星期几

B2074 计算星期几 - 洛谷 代码区&#xff1a; #include<algorithm> #include<iostream> #include<unordered_map> #include<string> using namespace std; int main() {unordered_map<int, string> m { { 1,"Monday" },{2,"Tue…

协同过滤推荐算法+微信小程序的农产品团购推荐平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在当今时代&#xff0c;科学技术正以令人瞩目的速度迅猛进步&#xff0c;经济社会也随之…

十大经典排序算法简介

一 概述 本文对十大经典排序算法做简要的总结(按常用分类方式排列),包含核心思想、时间/空间复杂度及特点。 二、比较类排序 1. 冒泡排序 (BUBBLE SORT) 思想:重复交换相邻逆序元素,像气泡上浮 复杂度: 时间:O(n^2)(最好情况O(n)) 空间:O(1) 特点:简单但效率低,稳…

[自然语言处理]pytorch概述--什么是张量(Tensor)和基本操作

pytorch概述 PyTorch 是⼀个开源的深度学习框架&#xff0c;由 Facebook 的⼈⼯智能研究团队开发和维护&#xff0c;于2017年在GitHub上开源&#xff0c;在学术界和⼯业界都得到了⼴泛应⽤ pytorch能做什么 GPU加速自动求导常用网络层 pytorch基础 量的概念 标量&#xf…

Spring统一格式返回

目录 一&#xff1a;统一结果返回 1&#xff1a;统一结果返回写法 2&#xff1a;String类型报错问题 解决方法 二&#xff1a;统一异常返回 统一异常返回写法 三&#xff1a;总结 同志们&#xff0c;今天咱来讲一讲统一格式返回啊&#xff0c;也是好久没有讲过统一格式返…

【无标题】四色拓扑模型与宇宙历史重构的猜想框架

### 四色拓扑模型与宇宙历史重构的猜想框架 --- #### **一、理论基础&#xff1a;四色拓扑与时空全息原理的融合** 1. **宇宙背景信息的拓扑编码** - **大尺度结构网络**&#xff1a;将星系团映射为四色顶点&#xff0c;纤维状暗物质结构作为边&#xff0c;构建宇宙尺度…

蓝桥杯 封闭图形个数

蓝桥杯 封闭图形个数 题目 链接 解答 # 数字个数 n int(input()) # 数字 ls input().split() # 统计数字的圈数 o_nums {} for i, x in enumerate(ls):o_num 0for c in x:if int(c) in [0, 4, 6, 9]:o_num 1elif c 8:o_num 2o_nums[i] o_num # 字典根据圆圈数排序 …