Redis中的 大/热 key问题 ,如何解决(面试版)

news2024/9/20 9:36:46

big key 

什么是 big key?

big key:就是指一个内存空间占用比较大的键(Key)

造成的问题:

  1. 内存分布不均。在集群模式下,不同 slot分配到不同实例中,如果大 key 都映射到一个实例,则分布不均,查询效率也会受到影响。
  2. 由于 Redis 单线程执行命令,操作大 Key 时耗时较长,从而导致 Redis 出现其它命令阻塞的问题。
  3. 大Key对资源的占用巨大,在进行网络 I/O 传输的时候,导致你获取过程中产生的网络流量较大,从而产生网络传输时间延长甚至网络传输发现阻塞的现象,例如一个 key 2MB,请求个 1000 次 2000 MB。
  4. 客户端超时。因为操作大 Key 时耗时较长,可能导致客户端等待超时。

如何判断是否是big key?

大 Key 可能出现在不同的场景中,不过其本质都是相同的,就是对应的值所占内存非常大,但是要占用多少内存才算大key这没有绝对的说法,主要还是取决于具体的场景以及应用需求,例如:

set key "大型字符串,xxxxxx······(此处省略无数个字符)"
HMSET student:8927 name "big" nickname "大型哈希表" 

 到底占用多少内存才算得上是 big key 呢?这个没有一个绝对的说法,主要取决于具体的场景以及应用需求。参考阿里云redis文档:

使用bigkeys命令查询bigkeys

这个是 Redis 内置的指令,直接在 Redis 的客户端 redis-cli 中就可以使用,该命令可以获取 Redis的整体信息,并且显示每种类型数据中最大的 Key

如何解决 big key问题?

开发方面:

  1. 对要存储的数据进行压缩,压缩之后再进行存储
  2. 大化小,即把大对象拆分成小对象,即将一个大 Key 拆分成若干个小 Key,降低单个 Key 的内存大小
  3. 使用合适的数据结构进行存储,比如一些用 String 存储的场景,可以考虑使用 Hash、Set 等结构进行优化

业务层面:

  1. 根据实际情况,调整存储策略,只存一些必要的数据
  2. 优化业务逻辑,从根源上避免大 Key 的产生

数据分布方面:

  1. 采用 Redis 集群方式进行 Redis 的部署,然后将大 Key 散落到不同的服务器上面,加快响应速度

热key

什么是热key

热key:通常是key的访问频率占比过大,或带宽占比过大的key

热key导致的问题:因为 Redis 的读写是单线程执行的,所以热点 key 可能会影响 Redis 的整体效率,消耗大量的 CPU 资源,从而降低 Redis 的整体吞吐量。集群环境下会使得流量不均衡,从而导致读写热点倾斜问题的发生。

如何解决热Key问题

采用多级缓存

  • 例如使用本地缓存,在应用层就返回数据,避免请求再发送到 Redis。
  • 或者使用前端缓存,例如将数据存储到浏览器中,这样一段时间内请求都不需要发送到后端。
  • 或者使用 CDN 缓存之类的,总之设置多级缓存,设定好业务允许的过期时间,分流请求,均分压力。

热点 key 拆分

如果某个Key包含了大量的数据,可以将其拆分成多个Key。例如,将一个大的List拆分成多个小的List,并且采用不同的Key

 

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

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

相关文章

拿下英语翻译!这四款在线翻译功不可没!

作为一个刚踏入职场的小白,我最近在为工作中的英语翻译问题头疼不已。不过,经过一番尝试和比较,我找到了几款翻译工具,它们在帮我解决翻译难题上表现得相当不错。今天,就让我以一个职场新手的身份,来跟大家…

OpenCV几何图像变换(6)计算反转仿射变换函数invertAffineTransform()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 反转一个仿射变换。 该函数计算由 23 矩阵 M 表示的逆仿射变换: [ a 11 a 12 b 1 a 21 a 22 b 2 ] \begin{bmatrix} a_{11} & a…

【超音速 专利 CN202110438812.4】广州超音速自动化科技股份有限公司

申请号CN202110438812.4公开号(公开)CN113390879A申请日2021.09.14申请人(公开)广州超音速自动化科技股份有限公司(833753)发明人(公开)张俊峰(总); 罗国和; 陈夏 原文摘要 本发明公开了一种涂…

【上】王树森《搜索引擎技术》- 课程笔记(概要、相关性)

课程合集:ShusenWang的个人空间-ShusenWang个人主页-哔哩哔哩视频 (bilibili.com) 课件地址:GitHub - wangshusen/SearchEngine: 搜索引擎原理 目录 概要 1、搜索引擎的基本概念 曝光和点击 垂搜vs通搜 课程安排 2、决定搜索满意度的因素&#…

某音作品列表,视频列表

声明:文章仅用于学习交流,如有侵权请联系删除 今天分享下某音app作品列表采集方法,我只详细说一下大步骤,细节就不多说了,留着大家去试吧 我们通过Fiddler 快捷方式 配置好代理 打开抖音进行抓包,随便找个达人打开主…

喜羊羊让你Pyecharts快速上手(实例+代码)

以下内容,皆为原创,制作实属不易,感谢大家的关注和点赞。 一.Pyecharts是什么 具体网址:pyecharts - A Python Echarts Plotting Library built with love. Pyecharts 是一个用于生成 Echarts 图表的 Python 库。Echarts 是由百度…

行业级API集成案例,巩固你的知识

在当今高度互联的世界,企业依靠无缝数据交换和简化的工作流程蓬勃发展。API(应用程序编程接口)已成为实现这一目标的秘密武器,可实现各种应用程序之间的强大集成。本文深入探讨了不同行业中 API 集成的真实示例,让您更…

四、5 下标引用、函数调用、结构成员(操作符)

(1)下标引用 [ ] (2)函数调用 ( ) (3)结构成员

python setup.py build install的GCC版本报错

在进行一些python三方库编译的时候,有时候会因为环境中的GCC版本导致编译错误,比如在mmdet3d,mmcv-full等库的使用中。 Your compiler (g 4.8.5) may be ABI-incompatible with PyTorch! Please use a compiler that is ABI-compatible with …

windows虚拟机VMware共享文件

1、设置本机电脑共享目录 2、设置所有人可连接 3、记录共享文件夹路径 4、设置当前用户密码 5、在虚拟机内映射驱动 6、在虚拟机内添入路径 7、输入用户名和密码 8、链接成功

BaseCTF-web-Week1

写在前面: 题目类型还是比较全,也都是基础题型,适合刚入门 CTF 的萌新学习,我之前在学校实验室预备队招新赛中也有出过一些类似的基础题,欢迎大家参考。 SNERT预备队招新CTF体验赛-Web(SWCTF)ht…

ozon恢复产品,Ozon恢复销售在六月份暂时关闭的品类

在6月份,Ozon发布通知:《Ozon将限制中国卖家电子产品、汽车摩配、DIY工具的销售》今天,我们收到通知,6月被关闭的品类将被重新开放销售。 Ozon恢复销售在六月份暂时关闭的品类地址:m6z.cn/5H6fQR 6月份的消息一出&…

【卡码网C++基础课 13.链表的基础操作1】

目录 题目描述与分析一、指针二、链表三、定义链表节点四、链表的插入五、代码编写 题目描述与分析 题目描述: 构建一个单向链表,链表中包含一组整数数据。输出链表中的所有元素。 要求: 1.使用自定义的链表数据结构 2.提供一个 linkedList …

一篇精通Ansible之playbook

华子目录 前言playbook概念playbook结构理解playbook核心元素playbook特点与优势 playbook基本语法ansible-playbook命令ansible总结查看主机清单ansible配置文件单个play语法检测运行 多个play查看模块doc变量事实变量导入变量文件字典变量 机密数据管理在playbook中导入变量文…

PTA团体程序设计天梯赛

这次题目出得比前几次简单很多,但有几道题占用的时间太多,导致后面几题仓促写完,未能全部正确,还是得多练 目录 L1-2 九牛一毛 L1-3 小孩子才做选择,大人全都要 L1-5 试试手气 L1-6 打PTA L1-8 随机输一次 L2-…

QT5.15.2加载mysql驱动-QMYSQL driver not loaded解决方法

Available drivers: "QSQLITE" "QODBC" "QODBC3" "QPSQL" "QPSQL7" QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7 源码下载(若存在&#xff0…

029集—CAD VBA识别“Esc”退出键——vba代码实现

vba程序运行时我们想按下“Esc”键时退出程序或做出进一步相应, 此时可借助windows API函数实现。 见下图: 部分代码如下: #If VBA7 Then 64位系统声明Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)…

【C++从练气到飞升】16---二叉搜索树

🎈个人主页:库库的里昂 ✨收录专栏:C从练气到飞升 🎉鸟欲高飞先振翅,人求上进先读书🎉 目录 ⛳️推荐 一、二叉搜索树概念 二、二叉搜索树的操作 2.1 二叉搜索树的查找 2.2 二叉搜索树的插入 2.3 二叉…

Linux基础 - yum、rzsz、vim 使用与配置、gcc/g++的详细解说

目录 一、Linux 软件包管理器 yum A.什么是软件包? B.关于rzsz,yum的配置 1.安装 sz,rz 命令: a.执行命令sz可将linux中的文件传输到Windows中 b.执行rz命令可将Windows中的文件传输到linux 2.scp XXX.tgz 用户名另一台lin…

BCLinux Euler 21.10 安装mysql 8.0.37 (二进制安装)

下载mysql安装包 #根据ldd --version的信息, 下载的是glic 2.28的包。 下载地址:https://downloads.mysql.com/archives/community/ 包名:mysql-8.0.37-linux-glibc2.28-x86_64.tar.xz#root用户操作 #系统环境:BigCloud Enterpri…