redis的热key、大key

news2024/11/17 22:33:13

目录

1.概述

2.查找方法

2.1.知道具体哪个key有问题

2.2.不知道具体哪个key有问题

3.处理方法

3.1.大key的处理方法

3.2.热key的处理方法


1.概述

大key:

含有较大数据或含有大量成员的Key称之为大Key,常见的大key如:

  • String类型的Key值大于10kb

  • list、set、zset、hash的成员个数超过5000

  • list、set、zset、hash的成员数量虽然只有1000个但这些成员的value总大小为100MB(成员体积过大)

注意:以上值只是参考,根据实际情况确定。

热key:

某个Key接收到的访问次数、显著高于其它Key时,称之为热Key。

大key带来的问题:

  1. 对Redis的请求变慢。
  2. Redis内存不断变大引发OOM,或达到maxmemory值引发写阻塞或重要Key被逐出。
  3. Redis Cluster中的某个node内存远超其余node。
  4. 由于对大key的请求很慢,容易造成请求的阻塞,在分布式架构下容易造成服务雪崩。
  5. 删除一个大Key很耗时,容易造成主结点阻塞,从而主从切换。

热key带来的问题:

  1. 大量请求直接打过来,服务器可能会扛不住,造成缓存击穿从而直接打挂后端存储(数据库),影响其他使用后端存储的业务。
  2. 可能使得redis的集群失去意义,Redis Cluster中各node流量不均衡造成Redis Cluster的分布式优势无法被利用,一个分片负载很高而其它分片十分空闲。

大key、热key的产生原因:

  1. 存放不合理,存储了不适合存放在内存中的数据,如用key存放音频视频这一类大体积二进制文件(大key)。
  2. 设计不合理,造成个别key中成员过多。(大key)。
  3. 未定期清理数据,没有设置过期时间,造成了如hash类型中key中的成员不断增加。
  4. 流量陡增,如出现某款爆款商品等(热key)。
  5. bug,代码的业务逻辑上对key的成员只增不减也未设置过期时间。

2.查找方法

2.1.知道具体哪个key有问题

利用调试指令进行分析查找大key:

debug key名,对Key进行分析并返回分析结果,其中serializedlength的值为该Key的序列化长度,序列化长度可以作为key大小的判断参考,但不一定准确。而且debug命令属于调试命令,在其运行时,进入Redis的其余请求将会被阻塞直到其执行完毕。线上环境进行分析不推荐该命令。

利用操作指令进行分析查找大key:

redis的各个数据结构的操作API自带返回其成员长度的命令。利用这些命令进行分析风险更小。

2.2.不知道具体哪个key有问题

前面的指令都是对具体的key进行分析,在不知道哪个key会有问题的时候,可以使用参数进行分析。

redis-cli的bigkeys参数用于查找大key。bigkeys仅能分别输出最大Key,如果想进行范围查询,比如找出全部成员数量超过10的hash,bigkeys是办不到的。

redis-cli的hotkeys参数用来分析热key,该参数能够返回所有Key的被访问次数,试用hotkeys的前提条件是将redis-server的maxmemory-policy参数设置为LFU。

3.处理方法

3.1.大key的处理方法

大key的处理方法有两种:

  • 拆分

  • 删除

拆分:

如将一个成员很多的hash拆分为多个hash。

删除:

将不适合Redis能力的数据存放至其它存储,并在Redis中删除此类数据。需要注意的是,删除大key可能很耗时,redis又是单线程执行的,很可能造成阻塞,Redis自4.0起提供了UNLINK命令,该命令能够异步的方式安全的删除大Key。

3.2.热key的处理方法

热key的处理方法有两种:

  • 复制

  • 读写分离

  • 多级缓存

复制:

在使用redis集群时,可以将热key复制多份,每个redis节点上存放一份,这样不存在请求的重定向使得压力全部定向到单个节点,能有效减轻单节点的压力。缺点是要进行复制的画只能在代码层手动操作,而且复制多份存放后会存在数据一致性问题。因此复制方案只能用于临时解决线上问题。

读写分离:

热key多数是读热key的操作,读写分离能保证从节点中数据的一致性,并且能轻松的横向扩展,能有效的分散压力,只是有点浪费资源,因为读写分离每个从节点上存的都是一样的数据。

多级缓存:

当热key数量不多,比如电商平台促销活动,热key都集中在少部分key上面,为此做读写分离增加机器性价比不高,使用多级缓存是个不错的解决方法。具体实现思路两种:

1.客户端本地缓存,redis和客户端之间增加一个中间层(proxy),专门用来进行热key探查,这个proxy专门用来监视redis来统计达到预设的热key阈值的key,统计好后推送给客户端,让客户端存在本地缓存。

2.将proxy探查到的热key推送到需要访问该热key的服务结点,使用服务结点的本地缓存,下次再来请求就不将流量打到redis上。

使用多级缓存会存在一个问题,因为每次推送之间有时间间隔,缓存中的数据和redis中的数据不是呈现强一致性的,而是呈现最终一致性的。这种代价也是不得不接受的,在使用缓存的时候注意不要拿缓存做逻辑,只用来做查询即可。

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

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

相关文章

用友降运维成本实践:OceanBase替换MySQL,实现高可用

导语:随着业务模型的不断变化使运维难度越来越大,用友IT内部采用任务调度中心XXL-JOB和配置管理中心Nacos来实现公司IT分布式任务调度和微服务开发。但XXL-JOB和Nacos集群数量的增多又使其支撑系统MySQL难以招架。 为了寻找一款既能提供高可用又能统一管…

git常用命令(linux和windows通用)

本文的命令已可满足日常需求 配置用户信息 git config --global user.name “github用户名” git config --global user.email “github绑定邮箱"查看配置信息 git config --global user.name git config --global user.email~/.bashrc文件介绍 ~指当前用户的根目录&…

负载分担方式的双链路热备份配置

** 负载分担方式的双链路热备份配置 ** 实验要求和拓扑 负载分担方式的优点和主备方式的不同 负载分担可以每个ac都管理ap这样就避免了资源浪费,然后又作到了备份 主备方式则是,ap都交给一个ac,另一个ac只作为备份 实验拓扑 实验要求 配置…

全面上新!阿里 2023 版(Java 岗)面试突击手册,Github 已标星 37K

程序员面试背八股,几乎已经是互联网不可逆的一个形式了。自从面试**八股文火了之后,网上出现了不少 Java 相关的面试题,很多朋友盲目收集背诵,**但网上大部分的面试题,大多存在这几个问题:第一,…

剑指 Offer 53 - II. 0~n-1中缺失的数字

摘要 剑指 Offer 53 - II. 0~n-1中缺失的数字 一、二分法 1.1 二分法分析 排序数组中的搜索问题,首先想到 二分法 解决。 根据题意,数组可以按照以下规则划分为两部分。 左子数组: nums[i]i;右子数组:…

Eolink 11月企业与产品动态速览!

本月,Eolink IDEA 插件 “Eolink ApiKit” 最新版本 1.1.3 发布,可进行方法 API 解析的插件,可自动生成注释,可分析方法出入参等。 此外,Eolink 再获多项荣誉与认证,持续行业领先!一起来看看 11…

我今天吃了SHI,请对下联

1. 跨平台终端 Tabby(前身是 Terminus) 是一个可高度配置的终端模拟器和 SSH 或串口客户端,支持 Windows,macOS 和 Linux。 还有一些功能比较常见和易于使用的: 集成了 SSH,Telnet 客户端和连接管理器,可以在 SSH 会…

JAVA SCRIPT设计模式--行为型--设计模式之Mediator中介者模式(17)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能,所以不可能像C,JAVA等面向对象语言一样严谨,大部分程序都附上了JAVA SCRIPT代码,代码只是实现了设计模式的主体功能,不代…

图的初体验

最近周赛有两个差不多的题目,都是关于图的,之前也没有怎么练过关于图的题目,来记录一下。 T1 力扣T320周赛:T3:到达首都的最少油耗 class Solution {//结果long result ;public long minimumFuelCost(int[][] roads…

【推免攻略】四.2021年北交计算机学院夏令营、预推免保研经验

欢迎订阅本专栏:《北交计算机保研经验》 订阅地址:https://blog.csdn.net/m0_38068876/category_10779337.html 【推免攻略】一.北交计算机学院夏令营、预推免攻略【推免攻略】二.联系导师的前期准备及注意事项【推免攻略】三.2020年北交计算机学院夏令营…

如何能成为测试老大?先搞懂项目中的敏捷开发模式

1 什么是敏捷开发? 1、敏捷开发是以用户的需求进化为核心,采取迭代、循序渐进的方式来 进行软件项目的开发。 2、即将项目切分为多个子项目,每个子项目单独发布,保证软件较早可用。 3、及时收集用户反馈,调整未发布…

线性回归线性关系、非线性关系、常见函数导数、损失函数与优化算法、正规方程与单变量函数梯度下降、多变量函数梯度下降

一、线性回归概述 线性回归(Linear regression):是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式 特点:只有一个自变量的情况称为单变量回归,多于一个自变量情况的叫做多元回归 特征值与目…

机器学习笔记之受限玻尔兹曼机(五)基于含隐变量能量模型的对数似然梯度

机器学习笔记之受限玻尔兹曼机——基于含隐变量能量模型的对数似然梯度引言回顾:包含配分函数的概率分布受限玻尔兹曼机——场景构建对比散度基于含隐变量能量模型的对数似然梯度引言 上一节介绍了对比散度(Constractive Divergence)思想,本节将介绍基于…

制造型企业如何进行多项目管理?这篇文章说清楚了

受经济全球化与科技迅速发展的影响,我国很多企业早已进入了多项目管理模式。多项目管理是从企业整体出发,动态选择不具有类似性的项目,对企业所拥有的或可获得的生产要素和资源进行优化组合,有效、最优地分配企业资源,…

葡聚糖修饰金纳米颗粒(Dex-AuNps)|聚环氧氯丙烷二甲胺修饰多孔磁性葡聚糖微球

葡聚糖修饰金纳米颗粒(Dex-AuNps)|聚环氧氯丙烷二甲胺修饰多孔磁性葡聚糖微球 产品描述:通过特异性识别作用在表面等离子体共振传感器的金膜表面构建了伴刀豆球蛋白A/葡聚糖修饰金纳米颗粒自组装膜 中文名称:葡聚糖修饰金纳米颗粒 英文名称&#xff1…

CMAKE编译知识

1,Ubuntu安装了cmake之后,直接输入指令查看版本。cmake -version 我这里的版本为3.16.3 2,使用visual studio里面创建一个CMake项目是最快可以看到的。但是一般无法理解。所以我找了网上资料。根据网上所说和自己再试错下。初步了解了cmake…

[附源码]JAVA毕业设计微博网站(系统+LW)

[附源码]JAVA毕业设计微博网站(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&#xf…

IAA游戏市场规模已达百亿,如何防范游戏安全问题?

近年来,移动休闲游戏市场发展速度迅猛,伽马数据发布的《2022年休闲游戏发展报告》称,2022年第一季度移动游戏下载量TOP200榜单中,休闲类游戏占比已达45%。 2022年第一季度下载量TOP200移动游戏占比情况丨数据来源伽马数据 相比IA…

MMCV学习——基础篇4(Hook)| 八千字:从设计模式到源码解读

MMCV学习——基础篇4(Hook) Hook 机制在MMCV的各个开源库中应用的十分广泛,它主要用于管理和扩展Runner的整个生命周期。通过Hook机制在Runner的各个生命周期节点调用自定义的函数,可以实现丰富的定制功能。 文章目录MMCV学习——…

【C语言航路】第八站:调试(第一幕)

前言 调试的这一站,对于市面上大部分的书籍都是缺失的,然而调试这个内容是非常重要的,尤其是在数据结构部分,将会频繁的使用,这也为我们后面讲解数据结构做一个铺垫。同时,在以后未来工作的时候&#xff0…