知道什么是热key吗?如何排查和处理?

news2024/11/13 11:39:17

目录标题

  • 一、什么是热Key?
  • 二、热点key危害?
  • 三、如何发现热点 key?
  • 四、热点key应对措施

在这里插入图片描述

一、什么是热Key?

热 key 问题就是突然有几十万的请求去访问 redis 上的某个特定 key,那么这样会造成流量过于集中,达到物理网卡上限,从而导致这台 redis 服务器直接宕机

Redis 中的热点 key 是指被大量请求访问的某些键,通常是由于这些键存储了热门数据,如热门商品、秒杀场景、热门文章、用户会话等。热点 key 的出现可能会带来一些问题和危害,以下是其介绍和应对方法:

  • 请求集中:热点 key 会导致大量请求集中在少数几个 key 上,增加了对这些 key 的访问压力。
  • 性能下降:由于请求集中,热点 key 的访问频率较高,可能会导致 Redis 服务器的性能下降,甚至造成 Redis 集群的崩溃。
  • 缓存击穿:如果某个热点 key 在缓存中过期,且被大量请求访问,那么这些请求可能会直接落到数据库上,导致数据库负载剧增,甚至可能导致数据库宕机。
  • 数据不一致:如果热点 key 的数据被频繁修改,那么可能会导致数据不一致的问题,尤其是在进行分布式部署时。
  • 主从同步延迟:如果Redis处于主从模式,热点Key的频繁访问会导致主节点压力增加,进而导致主从同步延迟,产生数据不一致的风险。这种情况在高并发场景下尤为明显。

二、热点key危害?

  • 服务可用性下降:热点 key 可能会导致 Redis 服务器的性能下降,甚至造成 Redis 服务不可用,从而影响整个系统的服务可用性。
  • 系统稳定性受损:热点 key 的存在可能会导致系统出现性能波动,从而影响系统的稳定性和可靠性。
  • 用户体验差:由于热点 key 可能导致请求响应时间变长,从而影响用户的体验,导致用户流失或不满意。

三、如何发现热点 key?

  • 凭借业务经验,进行预估哪些是热 key。比如某些商品要做秒杀,则商品 key 就可以判断为热 key,但并非所有业务都能预估出热 key。
  • 在客户端进行收集。比如在 redis 客户端执行 redis 命令之前,加入一行代码进行命令数据收集,然后通过网络将收集的命令发送出去,缺点是对客户端代码有入侵。
  • 在 Proxy 层做收集,但是并非所有的 redis 集群都有 proxy。
  • 用 redis 自带命令,monitor 命令可以实时抓取出 redis 服务器接收到的命令,然后写代码统计出热 key 是啥,不过高并发条件下,有内存暴增的隐患,影响 redis 的性能。Facebook 开源的 redis-faina(Python),提供了对 Monitor 的一些分析与定位。Monitor 命令本身会影响 Redis 的性能,特别是在高负载环境中。它会占用部分 Redis 服务器的 CPU 资源和网络带宽。
  • redis4.0.3 提供了客户端热点 key 发现功能,如果 key 比较多,执行比较慢。对性能要求不是太高的业务场景下,建议使用该进行 Hotkey 的定位与分析。使用前需要先配置 Redis 的内存淘汰策略
  • 自己抓包评估,redis 客户端使用 TCP 协议与服务端进行交互,通信协议采用 RESP,自己写程序监听端口,按照 RESP 协议规则解析数据进行分析,不过开发成本较高,不易维护。ELK 提供了一个名为 packetbeat 的抓包插件,可以对 Redis 的 TCP 报文进行抓包与分析。但往往需要搭配 ELK 一起使用,单独使用 packetbeat 插件的话也需要额外做一些定制化变更。

在这里插入图片描述

四、热点key应对措施

  • 数据分片:将热点 key 的数据进行分片存储,将请求均匀分布到不同的节点上,从而降低单个节点的压力。
  • 缓存预热:在系统启动时,预先加载热点数据到缓存中,避免大量请求落到数据库上。
  • 缓存失效策略:合理设置缓存的失效策略,避免所有缓存同时失效导致大量请求落到数据库上。
  • 缓存击穿处理:使用互斥锁或者设置热点 key 的短期失效时间,避免大量请求同时落到数据库上。
  • 监控与告警:实时监控热点 key 的访问情况,及时发现并处理潜在的问题。
  • 负载均衡:使用负载均衡技术,将请求均匀地分发到不同的节点上,降低单个节点的压力。
  • 增加二级缓存:发现热 key 以后,可以把热 key 数据加载到系统 JVM 并设置合适的缓存过期时间,针对热 key 的请求就会直接分散到各业务服务器上,防止所有请求同时访问同一台 redis。(如Guava Cache、Caffeine等)
  • 多级缓存:可以对 Hotkey 灵活调整缓存策略,比如客户端本地+分布式缓存、全局缓存+局部缓存、本地缓存 + Redis + CDN等。
  • 根据业务拆分子 key:该方式适用于 key 的数量较少且可以对 key 或 value 自身进行拆分的情况,令 Hotkey 尽量分散的落到不同的实例上。

在这里插入图片描述

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

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

相关文章

Docker安装 ▎Docker详细讲解 ▎数据卷挂载 ▎Nginx安装理解

前言 Docker是一种容器化技术,简化软件的部署和管理。文章详细解释了Docker的架构、安装步骤和常用命令,帮助用户快速启动和管理容器。还介绍了Docker镜像命令和数据卷挂载的实例,增强对持久化存储的理解,并涵盖了Nginx的安装方法…

npm切换为淘宝镜像源

要切换 npm 的镜像源,您可以使用以下几种方法: 前言 然而,由于众所周知的网络环境问题,直接使用npm官方源下载依赖包时,常常会遇到速度慢甚至下载失败的情况。因此,使用更稳定、更快速的国内镜像源就显得尤…

C++ (进阶) ─── 多态

目录 1. 多态的概念 1.1 概念 2. 多态的定义及实现 2.1多态的构成条件 2.2 虚函数 2.3虚函数的重写 2.4 C11 override 和 final 2.5 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类 3.1 概念 3.2 接口继承和实现继承 试题: 1. 多态的概念 1.1 概念 …

计算机人工智能前沿进展-大语言模型方向-2024-09-18

计算机人工智能前沿进展-大语言模型方向-2024-09-18 1. The Application of Large Language Models in Primary Healthcare Services and the Challenges W YAN, J HU, H ZENG, M LIU, W LIANG - Chinese General Practice, 2024 人工智能大语言模型在基层医疗卫生服务中的应…

【算法】堆与优先级队列

【ps】本篇有 4 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)最后一块石头的重量 .1- 题目解析 .2- 代码编写 2)数据流中的第 K 大元素 .1- 题目解析 .2- 代码编写 3)前K个高频单词 .1- 题目解析 .2- 代码编写 4&#xf…

什么是泛在智能?应用在哪些场景?

泛在智能是一个融合了多种技术概念和应用场景的综合性概念,其核心在于通过广泛嵌入的感知和计算设备,以及智能的人机交互界面,实现对环境、人和物的全面感知与智能响应。 定义与背景 泛在智能(Ambient Intelligence)是…

用Python画一个五星红旗

#codingutf-8 import turtle import mathdef draw_polygon(aTurtle, size50, n3): 绘制正多边形args:aTurtle: turtle对象实例size: int类型,正多边形的边长n: int类型,是几边形 for i in range(n):aTurtle.forward(size)aTurtle.left(360.0/n)de…

Koa (下一代web框架) 【Node.js进阶】

koa (中文网) 是基于 Node.js 平台的下一代 web 开发框架,致力于成为应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石; 利用 async 函数 丢弃回调函数,并增强错误处理,koa 没有任何预置的中间件,可快速…

DevExpress WinForms v24.1新版亮点:升级的HTML CSS支持

DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…

mavlink源码编译及示例使用

1.克隆源码: git clone https://github.com/mavlink/mavlink.git --recursive 克隆成功: 2.克隆python3与pip已安装 3.安装依赖: python3 -m pip install -r pymavlink/requirements.txt

[JavaEE]———进程、进程的数据结构、进程的调度

阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能帮到你! 目录 一:操作系统 1:操作系统的定位和功能 2:多任务操作系统 3&#xff1a…

硬件开篇——体系架构

1、驱动开发分类: 裸机驱动(无操作系统)——由寄存器控制;Linux驱动。 硬件: 计算机系统: 计算机架构:①冯诺依曼(指令、数据一起)②哈佛(指令、数据分开&a…

【BoF】《Bag of Freebies for Training Object Detection Neural Networks》

arXiv-2019 https://github.com/dmlc/gluon-cv 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4.1 Visually Coherent Image Mixup for Object Detection4.2 Classification Head Label Smoothing4.3 Data Preprocessing4.4 Traini…

如何使用ssm实现理财通的设计与实现

TOC ssm638理财通的设计与实现jsp 第一章 绪论 1.1 选题背景 目前整个社会发展的速度,严重依赖于互联网,如果没有了互联网的存在,市场可能会一蹶不振,严重影响经济的发展水平,影响人们的生活质量。计算机的发展&am…

功能测试干了三年,快要废了。。。

8年前刚进入到IT行业,到现在学习软件测试的人越来越多,所以在这我想结合自己的一些看法给大家提一些建议。 最近聊到软件测试的行业内卷,越来越多的转行和大学生进入测试行业,导致软件测试已经饱和了,想要获得更好的待…

Linux提升篇-服务器BIOS介绍

目录 前言BIOS 概述常用配置进入 BIOS 界面查询 iBMCIP 地址设置 BIOS 系统日期和时间设置服务器启动方式 前言 以下bios介绍适用于大部分2020年之后的服务器,包括Huawei系的鲲鹏CPU架构服务器,X86系也可参考,大部分配置项是一致的。 BIOS …

【Java】线程的同步——synchronized、ReentrantLock

对同一个线程,能否在获取到锁以后继续获取同一个锁? 答案是肯定可以获取同一个锁。因为JVM 允许同一个线程重复获取同一个锁,这种能被同一个线程反复获取的锁,就叫做可重入锁。 一、synchronized同步锁 在 Java中synchronized 同步锁…

HbuilderX自定义快捷键

打开快捷键设置:工具->自定义快捷键 复制想要修改的快捷键设置 修改后记得保存 可以通过该方法找到对应功能的系统默认快捷键

[数据集][目标检测]智慧养殖场肉鸡健康状态检测数据集VOC+YOLO格式4657张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4657 标注数量(xml文件个数):4657 标注数量(txt文件个数):4657 标注…

用ASR PRO离线语音芯片和月饼盒做一个会跑会跳会说话的机器狗

中秋节刚过,大家月饼盒应该还有,不要扔,可以做点小玩意。 机器狗的创意来自B站石桥北的视频,他使用了一块ESP32芯片和打印件加四个舵机实现,应该说是比较复杂的,需要有3D打印机打印外壳,还得会…