Redis的大key

news2025/1/26 5:18:32

什么是 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/631973.html

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

相关文章

K8s in Action 阅读笔记——【13】Securing cluster nodes and the network

K8s in Action 阅读笔记——【13】Securing cluster nodes and the network 13.1 Using the host node’s namespaces in a pod Pod中的容器通常在不同的Linux名称空间下运行,这使得它们的进程与其他容器或节点默认名称空间下运行的进程隔离开来。 例如&#xff…

初学Nginx要掌握哪些概念

文章目录 为什么要使用Nginx?什么是Nginx?Nginx的作用?反向代理负载均衡动静分离 为什么要使用Nginx? 小公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个…

Android 逆向安全行业前景如何?

前言 Android 逆向是指对已经发布的 Android 应用进行分析和研究,通过逆向工程,将 Android 应用中的底层实现原理、业务逻辑、源代码以及恶意行为等等信息进行破解和掌握。逆向工程可以让研究者深入了解 Android 应用的实现细节,从而识别和修…

算法刷题-数组-螺旋矩阵

59.螺旋矩阵 力扣题目链接 给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 思路 这道题目可以说在面试中出现频率较高的题目&#x…

3.DIY可视化-拖拽设计1天搞定主流小程序-前后分离框架运行

3.DIY可视化-拖拽设计1天搞定主流小程序-前后分离框架运行 前言 话不多说,直接实操。一、导入 diygw-ui-admin项目到vscode 克隆项目 : git clone https://gitee.com/diygw/diygw-ui-admin.git进入项目 桌面 cmd 运行: cd diygw-ui-admin推荐使用yarn 也可参照后面直接使用npm…

react合成事件+底层原理+发展历程

React中的合成事件 合成事件是围绕浏览器原生事件,充当跨浏览器包装器的对象;它们将不同浏览器的行为合并为一个API,这样做是为了确保事件在不同浏览器中显示一致的属性!保证兼容性 合成事件的基本操作 基础语法:在JSX元素上,直…

2023蓝桥杯大学A组C++决赛游记+个人题解

Day0 发烧了一晚上没睡着,感觉鼻子被打火机烧烤一样难受,心情烦躁 早上6点起来吃了个早饭,思考能力完全丧失了,开始看此花亭奇谭 看了六集,准备复习数据结构考试,然后秒睡 一睁眼就是下午2点了 挂了个…

交通 | GAMS快速入门及其在运输问题求解的应用

推文作者​:AmieeXue 第一部分 GAMS编程求解运输问题 GAMS,全称The General Algebraic Modeling System,是一款通用的高级数学建模工具,它支持线性规划、非线性规划、混合整数规划问题、二次约束规划(QCP)…

《面试1v1》List

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 《面试1v1》 连载中… 面试官: 小伙子,听说你对Java集合挺在行的? 候选人: 谢谢夸奖,我对Java集合还在学习中,只能算入门水平。特别是List这…

vue 3 第三十五章:集成 tailwind Css

文章目录 1. tailWind css介绍2. tailWind css基本使用2.1. 步骤一:安装Tailwind CSS2.2. 步骤二:创建配置文件2.3. 步骤三:配置PostCSS2.4. 步骤四:引入样式文件2.5. 步骤五:模板中使用tailWind css 3. 补充3.1. 语法…

【P60】JMeter Jtl 文件的 html 格式输出

文章目录 一、汇总报告(Summary Report)参数说明二、准备工作三、测试计划设计四、Jtl 文件的 html 格式输出 一、汇总报告(Summary Report)参数说明 可以查看事务或者取样器在某个时间范围内执行的汇总结果 使用场景&#xff1…

Shell脚本攻略:Linux防火墙(二)

目录 一、理论 1.SNAT 2.DNAT 3.tcpdump抓包工具 二、实验 1.SNAT实验 2.DNAT实验 3.tcpdump抓包 一、理论 1.SNAT (1)概念 SNAT又称源地址转换。 源地址转换是内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址 &#…

【软考系统规划与管理师笔记】第6篇 IT服务部署实施

这章基本也是管理概念,考试内容基本以教材为主 1 概述 IT服务部署实施是衔接IT服务规划设计与IT服务运营的中间阶段,负责对服务组 件进行客户化,并在充分满足客户要求的前提下,使用标准化的方法管理人员、资源、 技术和过程&…

【超简单的串口通信的工作原理】

上图是电脑收到来自微控制器经过串口发送的信息, 那么电脑是如何收到这些数据的呢? 任何一种通信都要包括硬件物理接口和软件通信协议。 串口通信物理接口如下图: 微控制器与电脑的通信仅需1根数据线将数据一位一位按顺序发送,称…

matlab的矩阵常用操作方法

matlab中数据的基本格式是矩阵,行向量、列向量和标量都是矩阵的特例。矩阵可以是二维的,也可以是多维的。 (1)查找矩阵中的元素 ①find函数 在matlab中,可以调用find函数在矩阵中查找满足一定条件的元素&#xff0c…

#创作纪念日# 我的创作128天纪念日

我的创作128天纪念日 机缘收获日常成就憧憬 机缘 小升初时,我开始接触编程,进入了一个全新的世界。刚开始学习编程时,我只是对电脑的一些操作比较感兴趣,但慢慢地,我开始对编写程序、设计算法产生了浓厚的兴趣。在实践…

创新研报 | 如何激发中国半导体企业发展潜力从而获得竞争优势,领跑新一轮增长?

近年来,伴随网络化、信息化、智能化飞速发展,半导体的应用领域不断拓展,在全球经济及社会发展中的重要性与日俱增。与此同时,越来越多的国家纷纷加码半导体,各个国家在半导体价值链中拥有不同的竞争优势。目前&#xf…

AI-Prompt 1.0 版简介公测!你的AI提示词网站!

提示词(Prompt) 是什么? 在 AI 大模型中,一个 prompt 是一个输入文本,用于触发模型生成输出。例如,当我们向一个 AI 大模型提交需求时,我们的需求就是一个 prompt。 在介绍产品之前,…

C++:二叉搜索树(非平衡化)

文章目录 一.二叉搜索树(key_value模型)二.二叉搜索树的节点删除三.二叉搜索树类对象其他接口构造函数,析构函数和赋值运算符重载节点插入接口和节点查找接口key_value模型二叉搜索树类模板总体代码 四.未经平衡化的二叉搜索树的缺陷 一.二叉搜索树(key_value模型) 树的节点定…

华为OD机试真题B卷 JavaScript 实现【数据最节约的备份方法】,附详细解题思路

一、题目描述 有若干个文件,使用刻录光盘的方式进行备份,假设每张光盘的容量是500MB。 求使用光盘最少的文件分布方式,所有文件的大小都是整数的MB,且不超过500MB,文件不能分隔、分卷打包。 二、输入描述 每组文件…