Redis的一个大Key

news2024/9/20 18:54:27

什么是 redis 的大 key? 

  • redis 的大 key 不是指存储在 redis 中的某个 key 的大小超过一定的阈值,而是该 key 所对应的 value 过大
  • 对于 string 类型来说,一般情况下超过 10KB 则认为是大 key;对于set、zset、hash 等类型来说,一般数据超过5000条即认为是大 key

redis 大 key 的场景?

  • 在抖音直播中,某个头部主播当前有很多正在观看的用户,假如有这样的数据结构:
  • 直播间和观看用户之间的映射关系采用 redis 存储
  • redis 的 key 是直播间id,长度可控且很小
  • redis 的 value 是个 list,list 包含直播间里面所有用户
  • 用户可能很多,就导致 list 长度不可控

大 key 带来的问题

  • redis 内存不断变大引发 OOM,或达到 maxmemory 设置值引发写阻塞或重要 key 被逐出
  • redis cluster 中的某个 node 内存远超其余 node,但因 redis cluster 的数据迁移最小粒度为 key 而无法将 node 上的内存均衡化
  • 大 key 上的读请求使 redis 占用服务器全部带宽,自身变慢的同时影响到该服务器上的其它服务
  • 删除一个大 key 造成主库较长时间的阻塞并引发同步中断或主从切换

如何查找大 key


使用命令 bigkeys

  • bigkeys 是 redis 自带的命令,对整个 key 进行扫描,统计 string,list,set,zset,hash 这几个常见数据类型中每种类型里的最大的 key,会造成线程阻塞
  • string 类型统计的是 value 的字节数
  • 另外 4 种复杂结构的类型统计的是元素个数,不能直观的看出 value 占用字节数
  • bigkeys 对分析 string 类型的大 key 是有用的,复杂结构的类型还需要一些第三方工具
  • 使用 memory 命令查看 key 的大小(仅支持 redis 4.0 以后的版本)
  • memory usage keyname
使用 rdb tools 工具包

  • rdbtools 是 python写的 一个第三方开源工具,用来解析 redis 快照文件
  • 除了解析 rdb 文件,还提供了统计单个 key 大小的工具
  • https://github.com/sripathikrishnan/redis-rdb-tools

如何解决大 key


如何存储大 key

  • 数据结构优化
  • 优化 redis 的数据结构,使用合适的数据结构来存储数据,避免出现 redis 大 key 的情况
  • 数据分片
  • 将大量数据分片存储到多个 key 中,避免单个 key 的数据量过大
  • 压缩数据
  • 对于存储的大数据,可以采用压缩算法来减少数据的大小,redis支持多种压缩算法,如 LZF、Snappy 等
  • 分布式存储
  • 将数据分散到多个 redis 实例中,避免单个 redis 实例存储过多数据导致 redis 大 key 的问题
  • 清理过期数据
  • 及时清理过期数据,避免数据堆积,导致 redis 大 key 的问题

如何删除大 key

  • 在系统低峰期,直接使用 del 命令删除 (会造成线程阻塞)
  • 使用 scan 命令删除 (会造成线程阻塞)
  • 使用 unlink 异步删除

 

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

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

相关文章

无线通信模块接口类型_USB/SDIO/UART接口wifi模块特性

无线通信模块接口,简单来说设备需要与外部设备交换数据的通讯接口,如工程师常提到的USB接口,UART接口,SDIO接口,I2S接口,I2C接口,WAN口,LAN口,SPI接口,以太网接口(RJ-45接口)等。 原文链接:http://www.skylab.com.cn/newsview-2768.html 1、USB接口 USB接口是平…

Git gui教程---第六篇 Git gui的使用 变动,提交

变动,提交 修改TEST.txt的内容,并且点击重新扫描,则TEST文件会出现在未缓存的窗口中 像前面教的一样,缓存后,添加描述后提交,并且打开历史记录可以查看到提交的变动。我这里会新增一个文件并且提交多几次&…

N天爆肝数据库——MySQL(2)

本篇文章,主要对DML DQL进行知识总结和学习。 期待和大家一起学习进步。DML-介绍 DML(数据库操作语言),用来对数据库中表的数据 记录进行增删改操作。 添加数据(INSERT) 修改数据(UPDATE) 删除数据&#…

计算机毕业论文内容参考|基于Java的城乡低保信息管理系统的设计和实现

文章目录 导文摘要:前言:绪论:1课题背景:2国内外现状与趋势:3课题内容:相关技术与方法介绍:系统分析:系统设计:系统实现:系统测试:总结与展望:1本文总结:2后续工作展望:导文 这里是导文计算机毕业论文内容参考|基于Java的城乡低保信息管理系统的设计和实现 摘要:…

C++图形开发(10):移动的方块

文章目录 1.引入2.静止的方块3.移动的方块 1.引入 那么我们今天就来实现一下矩形的移动 注意:本篇文章的内容都是基于此前用空格控制的小球的基础上进行开发的,详见:C图形开发(8):空格键控制小球起跳 先来…

PHP实现微信小程序推送消息至公众号

1、申请微信小程序和公众号必须是同一个主体 2、小程序和公众号必须要认证 3、公众号是服务号,接收消息必须关注公众号 4、公众号后台配置 开通模版服务 申请模版,获取模板消息的ID 关联小程序 获取公众号appid 5、小程序后台获取appid,a…

常用异常检测算法总结记录

这篇博文主要是延续前文系列的总结记录,这里主要是总结汇总日常主流的异常检测算法相关知识内容。 (1)基于统计方法的异常值检测 基于统计方法的异常值检测是一种常用的异常检测算法,它基于样本数据的统计特性来识别与其他样本显…

华为OD机试真题 Java 实现【阿里巴巴找黄金宝箱(I)】【2023 B卷 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 一、题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面贴有…

如何从一个仪表盘管理多个WordPress网站?

您是否正在寻找一种管理多个WordPress网站的简单方法? 监控多个网站并使其保持更新可能非常耗时。 幸运的是,有几种 WordPress 管理工具可以让您从单个仪表板管理多个 WordPress 网站变得非常容易。这将帮助您节省大量时间,同时使所有 Word…

【Java】堆和优先级队列PriorityQueue

文章目录 一、堆1.1 堆的概念1.2 堆的存储方式1.3 堆的创建1.4 堆的插入与删除1.5 堆的应用场景 二、 优先级队列2.1 什么是优先级队列2.2 堆模拟实现优先级队列 三、Java中的PriorityQueue3.1 PriorityQueue的特性3.2 常用方法 一、堆 1.1 堆的概念 在数据结构中&#xff0c…

Python实现PSO粒子群优化算法优化随机森林回归模型(RandomForestRegressor算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一…

虚拟机的安装

1.选择自定义安装 然后下一步 2.选择稍后安装操作系统,也可以选择2 直接安装 3. 选择Linux和相关版本 4.命名虚拟机 默认都是C盘,修改一下好点 5.分配处理器 看需要同时开几台虚拟机,同时也看一下自己的CPU,处理器默认选1个就行,内核数量 选择为 逻辑处理器数量/同时开的虚…

easyupload

红框位置是上传后的提示 依次尝试上传,发现php,phtml.php3,php5,双写等都不行 .htaccess文件也不行 尝试.php. 绕过 (windows中会把后缀名最后的空格和. 省略,即上传.php.绕过后会变为.php) 加入图片头的php文件也不行 但是加入文…

Gitlab 新项目搭建

文章目录 Gitlab 新项目搭建新建空白项目初始化本地仓库并提交建立本地仓库和远程仓库关系并推送 Gitlab 新项目搭建 新建空白项目 项目名称与本地新建项目名称相同 初始化本地仓库并提交 进入本地项目根目录下,右击 git bash here打开命令窗口;初始化…

【Gradle】Gradle的概述与简单使用

一、概述 1.什么是Gradle? Gradle 是一种构建工具。 Java世界中主要有三大构建工具:Ant、Maven和Gradle。Ant几乎销声匿迹了,常见的就只有Maven和Gradle。 目前市面上Java开发,使用的构建工具基本都是Maven;安卓开…

Zabbix 的使用 续

Zabbix 的使用 续 一、部署 zabbix 代理服务器1.1 环境准备1.2 设置 zabbix 的下载源,安装 zabbix-proxy1.3 部署数据库,要求 MySQL 5.7 或 Mariadb 10.5 及以上版本1.4 导入数据库信息1.5 修改 zabbix-proxy 配置文件1.6 启动 zabbix-proxy1.7 在所有主…

Linux基础工具大全

今天,我带来Linux的基本工具大全。 目录 Linux 软件包管理器 yum软件包的概念查看软件包软件包的名称如何安装软件如何卸载软件更新yum源 Linux编辑器-vimvim的概念vim的几种模式vim的基本操作vim正常模式命令集vim末行模式命令集vim操作总结 Linux编译器-gcc/g的使…

AMCV761、AMC06电液伺服阀放大器

AMCV102、AMC106A、AMCV761、AMC06、AMC16、AMC12、AMC07、AMC13电液伺服阀双喷嘴一档板、干式力矩马达、力反馈八种基本形式,流量范围 1-400L/min、额定油压力 25Mpa 与服油缸或马达一起,用于位置、速度、加速度和力值控制。外置伺服放大器。型有抗污染…

C语言 指针进阶(一)

目录 一、字符指针 二、指针数组 通过类比的方法来认识指针数组 2.1指针数组的一般形式 2.2指针数组模拟实现二维数组 三、数组指针 通过类比的方法来认识数组指针 3.1数组指针的一般形式 3.2&数组名VS数组名 3.3数组指针的使用 四、数组参数、指针参数 4.1一维数…

Socket编程接口API并实现简单的TCP网络编程

#include <sys/types.h> #include <sys/socket.h> socket()创建套接字&#xff0c;成功返回套接字的文件描述符&#xff0c;失败返回-1 domain: 设置套接字的协议簇&#xff0c; AF_UNIX AF_INET AF_INET6 type: 设置套接字的服务类型 SOCK_STREAM SOCK_DGRAM prot…