Redis的热key解决
1、Redis热Key会带来哪些问题

1、流量集中,达到物理网卡上限。
当某一热点 Key 的请求在某一主机上超过该主机网卡上限时,由于流量的过度集中,会导致服务器中其它服务无法进行。
2、请求过多,缓存分片服务被打垮。
如果热点过于集中,热点 Key 的缓存过多,超过目前的缓存容量时,就会导致缓存分片服务被打垮现象的产生。
3、DB 击穿,引起业务雪崩。
当缓存服务崩溃后,此时再有请求产生,会缓存到后台 DB 上,由于DB 本身性能较弱,在面临大请求时很容易发生请求穿透现象,会进一步导致雪崩现象,严重影响设备的性能。
二、如何解决热Key问题
目前业内的方案有两种 (1)利用二级缓存 比如利用ehcache,或者一个HashMap都可以。在你发现热key以后,把热key加载到系统的JVM中。 针对这种热key请求,会直接从jvm中取,而不会走到redis层。 假设此时有十万个针对同一个key的请求过来,如果没有本地缓存,这十万个请求就直接怼到同一台redis上了。 现在假设,你的应用层有50台机器,OK,你也有jvm缓存了。这十万个请求平均分散开来,每个机器有2000个请求,会从JVM中取到value值,然后返回数据。避免了十万个请求怼到同一台redis上的情形。 (2)备份热key 这个方案也很简单。不要让key走到同一台redis上不就行了。我们把这个key,在多个redis上都存一份不就好了。接下来,有热key请求进来的时候,我们就在有备份的redis上随机选取一台,进行访问取值,返回数据。 假设redis的集群数量为N,步骤如下图所示
注:不一定是2N,你想取3N,4N都可以,看要求。 伪代码如下

constM = N * 2
//生成随机数
random = GenRandom(0, M)
//构造备份新keybakHotKey = hotKey + “_” + randomdata = redis.GET(bakHotKey)ifdata == NULL {data = GetFromDB()redis.SET(bakHotKey, expireTime + GenRandom(0,5))
}
业内方案
OK,其实看完上面的内容,大家可能会有一个疑问。
烟哥,有办法在项目运行过程中,自动发现热key,然后程序自动处理么?
嗯,好问题,那我们来讲讲业内怎么做的。其实只有两步 (1)监控热key (2)通知系统做处理 正巧,前几天有赞出了一篇《有赞透明多级缓存解决方案(TMC)》,里头也有提到热点key问题,我们刚好借此说明 (1)监控热key 在监控热key方面,有赞用的是方式二:在客户端进行收集。 在《有赞透明多级缓存解决方案(TMC)》中有一句话提到
TMC 对原生jedis包的JedisPool和Jedis类做了改造,在JedisPool初始化过程中集成TMC“热点发现”+“本地缓存”功能Hermes-SDK包的初始化逻辑。
也就说人家改写了jedis原生的jar包,加入了Hermes-SDK包。 那Hermes-SDK包用来干嘛? OK,就是做热点发现和本地缓存。 从监控的角度看,该包对于Jedis-Client的每次key值访问请求,Hermes-SDK 都会通过其通信模块将key访问事件异步上报给Hermes服务端集群,以便其根据上报数据进行“热点探测”。
当然,这只是其中一种方式,有的公司在监控方面用的是方式五:自己抓包评估。 具体是这么做的,先利用flink搭建一套流式计算系统。然后自己写一个抓包程序抓redis监听端口的数据,抓到数据后往kafka里丢。 接下来,流式计算系统消费kafka里的数据,进行数据统计即可,也能达到监控热key的目的。
(2)通知系统做处理 在这个角度,有赞用的是上面的解决方案一:利用二级缓存进行处理。 有赞在监控到热key后,Hermes服务端集群会通过各种手段通知各业务系统里的Hermes-SDK,告诉他们:"老弟,这个key是热key,记得做本地缓存。" 于是Hermes-SDK就会将该key缓存在本地,对于后面的请求。Hermes-SDK发现这个是一个热key,直接从本地中拿,而不会去访问集群。
除了这种通知方式以外。我们也可以这么做,比如你的流式计算系统监控到热key了,往zookeeper里头的某个节点里写。然后你的业务系统监听该节点,发现节点数据变化了,就代表发现热key。最后往本地缓存里写,也是可以的。
通知方式各种各样,大家可以自由发挥。本文只是提供一个思路。
参考文献:
https://www.cnblogs.com/rjzheng/p/10874537.html
https://juejin.cn/post/7010231093664153613
Redis 热 Key 发现以及解决办法 | 董宗磊的博客--靡不有初,鲜克有终
相关文章:
Redis的热key解决
1、Redis热Key会带来哪些问题 1、流量集中,达到物理网卡上限。 当某一热点 Key 的请求在某一主机上超过该主机网卡上限时,由于流量的过度集中,会导致服务器中其它服务无法进行。 2、请求过多,缓存分片服务被打垮。 如果热点过于…...
在linux中查找 / 目录下的以.jar结尾的文件(find / -name *.jar)
文章目录 1、查找 / 目录下的以.jar结尾的文件 1、查找 / 目录下的以.jar结尾的文件 [rootiZuf6332h890vozldoxcprZ ~]# find / -name *.jar /etc/java/java-1.8.0-openjdk/java-1.8.0-openjdk-1.8.0.342.b07-1.el9_0.x86_64/lib/security/policy/limited/US_export_policy.ja…...
【Python爬虫教程】第6篇-使用session发起请求
为什么要使用session 前面介绍了如何使用reqesuts发起请求,今天介绍如何使用session发起请求。session简单理解就是一种会话机制,在浏览器中我们登录完之后,后面再请求服务数据都不需要再登录了,以为Cookie里已经保存了你的会话状…...
【Hot100】LeetCode—763. 划分字母区间
目录 题目1- 思路2- 实现⭐763. 划分字母区间——题解思路 3- ACM 实现 题目 原题连接:763. 划分字母区间 1- 思路 思路 目标:同样的字母 字符串尽可能的长 问1:怎么确定字母数 ——> 哈希表问2:怎么让字符尽可能的长&#…...
分布式服务基于Zookeeper的分布式锁的实现
一、序言 ZooKeeper 的分布式锁机制是一种协调多个客户端访问共享资源的方法。通过使用 ZooKeeper 的持久化节点和临时顺序节点,可以实现高效且可靠的分布式锁。下面是分布式锁的工作原理以及如何使用它的具体步骤。 二、Zookeeper分布式锁的核心原理 创建锁目录节…...
Rust编程-I/O
文件读取: 依赖:标准库中use std::fs; 模块 读取文件:fs::read_to_string(filepath:string) -> Result<String> String是文件内容 下面代码来自《Rust权威指南》,主要作用是从文件中检索,并返回检索内容所在的行…...
FastAPI 学习之路(四十七)WebSockets(三)登录后才可以聊天
之前我们是通过前端自动生成的token信息,这次我们通过注册登录,保存到本地去实现。首先,我们实现一个登录页面,放在templates目录下。 <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…...
数据结构—链式二叉树-C语言
代码位置:test-c-2024: 对C语言习题代码的练习 (gitee.com) 一、前言: 在现实中搜索二叉树为常用的二叉树之一,今天我们就要通过链表来实现搜索二叉树。实现的操作有:建二叉树、前序遍历、中序遍历、后序遍历、求树的节点个数、求…...
nginx代理gitee
背景 若干台agv设备,这些设备都是没有公网的(无法访问百度等)。 一台服务器(ubuntu20.04)有线可以公网,无线可以实现内部通信(agv,plc等设备)。 目的 agv每一次更新代码,拉取代码等都需要切换到有公网的网络,多台agv设…...
一款IM即时通讯聊天系统源码,包含app和后台源码
一款IM即时通讯聊天系统源码 聊天APP 附APP,后端是基于spring boot开发的。 这是一款独立服务器部署的即时通讯解决方案,可以帮助你快速拥有一套自己的移动社交、 企业办公、多功能业务产品。可以 独立部署!加密通道!牢牢掌握通…...
Camunda如何通过外部任务与其他系统自动交互
文章目录 简介流程图外部系统pom.xmllogback.xml监听类 启动流程实例常见问题Public Key Retrieval is not allowed的解决方法java.lang.reflect.InaccessibleObjectException 流程图xml 简介 前面我们已经介绍了Camunda的基本操作、任务、表: Camunda组件与服务与…...
Django ORM中ExpressionWrapper的用途
ExpressionWrapper 在 Django ORM 中,直接在 filter 方法中进行字段间的比较时,不能直接使用算术运算符(如 、-、*、/)来操作 F 对象,需要使用 ExpressionWrapper 来包装表达式并指定输出字段类型。 使用Q对象&#…...
什么软件修复视频画质比较好,视频画质修复工具
有些视频中可能会出现噪点、残影、颜色失真等问题,导致观看时体验感不太好,修复视频画质可以去除这些问题,使视频更加干净、清晰和真实。 高质量的视频画质能够提高观众的观看体验,让观众更加享受观看视频的过程。特别是在需要展示…...
效能工具:执行 npm start 可直接切换proxy代理UR后直接启动项目
1) 背景: 我们项目是2个前端3个后端的配置。前端和每个后端都有需要调试的接口。 因此经常切换vite.congig.js中的proxy后端代理链接,是挺麻烦的。 于是我研究如何能快速切换后端URL,所幸懒人有懒福,我找到了Inquirer 和 fs, 实…...
MongoDB自学笔记(一)
一、MongoDB简介 MongoDB是一款基于C开发的文档型数据库。与传统的关系型数据库有所不同,MongoDB面向的是文档,所谓的文档是一种名为BSON (Binary JSON:二进制JSON格式)是非关系数据库当中功能最丰富,最像…...
【AIGC】二、mac本地采用GPU启动keras运算
mac本地采用GPU启动keras运算 一、问题背景二、技术背景三、实验验证本机配置安装PlaidML安装plaidml-keras配置默认显卡 运行采用 CPU运算的代码step1 先导入keras包,导入数据cifar10,这里可能涉及外网下载,有问题可以参考[keras使用基础问题…...
【Qt】使用临时对象的坑
前言 使用临时对象时,一定要注意临时对象析构后是否会对代码造成影响,下面是一些可能出现的错误 std::string Widget::getStr() {return "nihao"; }void Widget::on_pushButton_clicked() {std::string objStr getStr();const char* str g…...
Apache-Flink未授权访问高危漏洞修复
漏洞等级 高危漏洞!!! 一、漏洞描述 攻击者没有获取到登录权限或未授权的情况下,或者不需要输入密码,即可通过直接输入网站控制台主页面地址,或者不允许查看的链接便可进行访问,同时进行操作。 二、修复建议 根据业务/系统具体情况,结合如下建议做出具体选择: 配…...
Unable to obtain driver using Selenium Manager: Selenium Manager failed解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
(01)Unity使用在线AI大模型(使用百度千帆服务)
目录 一、概要 二、环境说明 三、申请百度千帆Key 四、使用千帆大模型 四、给大模型套壳 一、概要 在Unity中使用在线大模型分为两篇发布,此篇文档为在Python中使用千帆大模型,整体实现逻辑是:在Python中接入大模型—>发布为可传参的…...
承美之话小程序开发概述
承美之话小程序开发概述承美之话小程序是一款基于微信生态的社交或服务类应用,可能涉及美学分享、艺术交流、生活美学等内容。开发此类小程序需结合微信官方开发规范与业务需求,以下为关键开发要点:核心功能模块用户系统 集成微信开放能力&am…...
Vim-signify 异步更新技巧:让你的 Vim 编辑器更智能
Vim-signify 异步更新技巧:让你的 Vim 编辑器更智能 【免费下载链接】vim-signify :heavy_plus_sign: Show a diff using Vim its sign column. 项目地址: https://gitcode.com/gh_mirrors/vi/vim-signify Vim-signify 是一个强大的 Vim/Neovim 插件…...
如何为Windows 11 LTSC系统一键安装微软商店:3分钟解决应用生态难题
如何为Windows 11 LTSC系统一键安装微软商店:3分钟解决应用生态难题 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 你是否在使用Windows …...
10分钟快速上手SecGPT:网络安全大模型入门实战指南
10分钟快速上手SecGPT:网络安全大模型入门实战指南 【免费下载链接】SecGPT SecGPT网络安全大模型 项目地址: https://gitcode.com/gh_mirrors/se/SecGPT SecGPT是全球首个网络安全开源大模型,专为网络安全场景打造,旨在以人工智能技术…...
从“技术迷宫“到“一键导航“:OpCore-Simplify如何让黑苹果配置变得像搭积木一样简单
从"技术迷宫"到"一键导航":OpCore-Simplify如何让黑苹果配置变得像搭积木一样简单 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-S…...
提升效率利器:用快马平台生成openclaw智能安装器,自动适配环境一键搞定
最近在折腾openclaw这个工具时,发现手动安装真是费时费力。不同操作系统、Python版本、网络环境都要适配不同的安装方案,光是查资料和试错就花了大半天。于是我用InsCode(快马)平台做了个智能安装配置器,把整个过程自动化了,效率提…...
从选型到接线:工业现场S7-1200 PLC读取K型热电偶温度的完整避坑指南
从选型到接线:工业现场S7-1200 PLC读取K型热电偶温度的完整避坑指南 在热处理车间嘈杂的设备声中,一组K型热电偶正默默监测着关键工艺温度。突然,中控室屏幕上的温度曲线开始剧烈波动——这是每位自动化工程师都熟悉的"噩梦场景"。…...
CTFmisc文件头尾解析与隐写实战指南
1. CTFmisc文件头尾基础解析 第一次参加CTF比赛时,我盯着misc题目里那个损坏的图片文件发呆了半小时。直到队友提醒我检查文件头,才发现原来是个伪装成jpg的zip压缩包。这种"挂羊头卖狗肉"的把戏在CTF比赛中实在太常见了,今天就带大…...
damaihelper:智能票务自动化系统 - 重新定义公平抢票技术范式
damaihelper:智能票务自动化系统 - 重新定义公平抢票技术范式 【免费下载链接】damaihelper 支持大麦网,淘票票、缤玩岛等多个平台,演唱会演出抢票脚本 项目地址: https://gitcode.com/gh_mirrors/dam/damaihelper 一、技术赋能&#…...
别再死记硬背了!用‘四体交叉’和‘双端口RAM’的实战题目,彻底搞懂计算机组成原理的存储器提速
从四体交叉到双端口RAM:用实战思维破解存储器提速难题 计算机组成原理中那些晦涩的存储器提速概念,是否总让你在题海中迷失方向?当"单体多字"、"多体并行"、"四体交叉"这些术语在教材里冰冷排列时,…...
