【Redis】浅析Redis大Key

目录

1、什么是Redis大Key

2、大 Key 是怎么产生的

3、大 Key 导致的问题

4、如何快速找到 Redis 大 Key

5、大 Key 优化策略

6、总结


我们在使用 Redis 的过程中,如果未能及时发现并处理 Big keys(下文称为“大Key”),可能会导致服务性能下降、用户体验变差,严重的甚至会引发大面积故障。本文将介绍大Key产生的原因、其可能引发的问题及如何快速找出大Key并将其优化的方案。

1、什么是Redis大Key

在 Redis 中,大 Key 是指在 Redis 中存储的单个键值对所占的空间过大,对于大 Key 也没有严格的定义区分,但通常满足以下条件的 Key 会被视为大 Key

2、大 Key 是怎么产生的

大 Key 通常是由于下面这些原因产生的:

  • 程序设计不当,比如直接使用 String 类型存储较大的文件对应的二进制数据。
  • 对于业务的数据规模考虑不周到,比如使用集合类型的时候没有考虑到数据量的快速增长。
  • 未及时清理垃圾数据,比如哈希中冗余了大量的无用键值对。

3、大 Key 导致的问题

当 Redis 中时出现大 Key问题时,可能会对性能和内存使用产生负面影响,影响的方面包括:

  • 由于 Redis 执行命令是单线程处理,然后在操作大 key 时会比较耗时,那么就会阻塞 Redis,从客户端这一视角看,就是很久很久都没有响应。
  • 每次获取大 key 产生的网络流量较大,如果一个 key 的大小是 1 MB,每秒访问量为 1000,那么每秒会产生 1000MB 的流量,这对于普通千兆网卡的服务器来说是灾难性的。
  • 如果使用 del 删除大 key 时,会阻塞工作线程,这样就没办法处理后续的命令。
  • 集群架构下,某个数据分片的内存使用率远超其他数据分片,无法使数据分片的内存资源达到均衡。

4、如何快速找到 Redis 大 Key

如果我们想要快速的找出 Redis 中的大 Key,可以使用 Redis 的命令和工具进行扫描和分析。以下是一些方法:

  • 使用 Redis 自带的 --bigkeys 参数来查找,这个命令会以遍历的方式分析 Redis 实例中的所有 Key,并返回整体统计信息与每个数据类型中 Top1 的大 Key。
  • 使用 Redis 自带的 SCAN 命令,这个命令会以遍历的方式分析 Redis 实例中的所有 Key,并返回整体统计信息与每个数据类型中 Top1 的大 Key。
  • 借助开源工具分析 RDB 文件,比如 redis-rdb-tools、rdb_bigkeys 等。
  • 借助公有云的 Redis 分析服务,比如阿里云、腾讯云等。

5、大 Key 优化策略

如果 Redis 出现了大 Key 的问题,我们找到了这个大 Key 后应该如何处理呢?常见处理以及优化办法如下:

  • 分割 bigkey:将一个 bigkey 分割为多个小 key。例如,将一个含有上万字段数量的 Hash 按照一定策略(比如二次哈希)拆分为多个 Hash。
  • 手动清理:Redis 4.0+ 可以使用 UNLINK 命令来异步删除一个或多个指定的 key。Redis 4.0 以下可以考虑使用 SCAN 命令结合 DEL 命令来分批次删除。
  • 采用合适的数据结构:例如,文件二进制数据不使用 String 保存、使用 HyperLogLog 统计页面 UV、Bitmap 保存状态信息。
  • 开启 lazy-free(惰性删除/延迟释放) :lazy-free 特性是 Redis 4.0 开始引入的,指的是让 Redis 采用异步方式延迟释放 key 使用的内存,将该操作交给单独的子线程处理,避免阻塞主线程。

6、总结

本文介绍了 Redis 中大 Key 的定义及其可能引发的问题,并提供了快速定位大Key的方法以及优化方案。通过合理的优化措施,我们可以有效提升 Redis 的性能,改善用户体验。

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

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

相关文章

Rocky DEM tutorial3_Vibrating Screen_振荡筛

tutorial3_Vibrating Screen_振荡筛 文章目录 tutorial3_Vibrating Screen_振荡筛0. 目的1. 模型介绍2. 模型设置2.1 Physics设置2.2 导入几何2.3 创建一个进口的几何面2.4 定义运动 Motion frame2.5 材料设置,保持默认即可2.6 设置材料间的相互作用 materials inte…

小林渗透入门:burpsuite+proxifier抓取小程序流量

目录 前提: 代理: proxifier: 步骤: bp证书安装 bp设置代理端口: proxifier设置规则: proxifier应用规则: 结果: 前提: 在介绍这两个工具具体实现方法之前&#xff0…

阿里云-防火墙设置不当导致ssh无法连接

今天学网络编程的时候,看见有陌生ip连接,所以打开了防火墙禁止除本机之外的其他ip连接: 但是当我再次用ssh的时候,连不上了才发现大事不妙。 折腾了半天,发现阿里云上可以在线向服务器发送命令,所以赶紧把2…

深度学习基础(2024-11-02更新到图像尺寸变换 与 裁剪)

1. 名词解释 FFN FFN : Feedforward Neural Network,前馈神经网络馈神经网络是一种基本的神经网络架构,也称为多层感知器(Multilayer Perceptron,MLP)FFN 一般主要是包括多个全连接层(FC)的网络&#xff…

代码的缘起

代码的发展历程是一个从简单到复杂、从底层硬件操作逐步抽象为更高级别语言的过程。自图灵和冯诺依曼等先驱者奠定了计算机科学的基础以来,软件编程逐渐成为了连接人类思维与机器逻辑的桥梁。最初的程序设计依赖于直接控制计算机硬件的低级语言,如汇编语…

2025年上半年软考高级科目有哪些?附选科指南

新手在准备报考软考时,都会遇到这样的一个问题——科目这么多,我适合考什么?2025上半年软考高级有哪些科目可以报考?要想知道自己适合报什么科目,就需要了解每个科目是什么,考什么等一系列的问题&#xff0…

【初阶数据结构篇】链式结构二叉树(二叉链)的实现(感受递归暴力美学)

文章目录 须知 💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力! 👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗&#xff1…

pip install -r requirements.txt下载速度慢

安装包下载速度慢,切换镜像源 方法 1:直接使用镜像源加速安装(推荐)方法 2:修改 pip 配置文件 方法 1:直接使用镜像源加速安装(推荐) 在安装命令后添加 -i 参数,并指定国…

Php实现钉钉OA一级审批,二级审批

Php实现钉钉OA一级审批,二级审批 一级审批 public function oaPush($user_id,$person,$data){//测试数据,上线需要删除$user_id 154502333155;//发起人$person [154502665555];//审批人$len count($person);$result null;if($len>0){$approve_con…

2024年第六届全球校园人工智能算法精英大赛——【算法挑战赛】钢材表面缺陷检测与分割 比赛复盘

引言 钢材表面缺陷检测在钢铁生产中是确保质量的关键环节,传统的人工检测方式难以满足大 规模工业生产的需求。近年来,基于深度学习的缺陷检测方法因其高效性和准确性受到广泛关 注。然而,现有的深度学习模型如U-Net虽具备较好的分割性能&am…

【网络】自定义协议——序列化和反序列化

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是序列化和分序列,并且自己能手撕网络版的计算器。 > 毒鸡汤:有些事情,总是不明白,所以我不…

Darknet 连接教程

本篇文章仅供学习,严禁用于非法用途。 1,前言: 首先明确一点,Darknet真没那么神奇,虽然有些技术文章的确很有水平,对于前端学习,软件开发以及PHP和一些服务器端维护都有许多文章,但…

Windows密码的网络认证---基于挑战响应认证的NTLM协议

一,网络认证NTLM协议简介 在平时的测试中,经常会碰到处于工作组的计算机,处于工作组的计算机之间是无法建立一个可信的信托机构的,只能是点对点进行信息的传输。 举个例子就是,主机A想要访问主机B上的资源,…

电脑虚拟机启动树莓派rviz

因为我虚拟机ip和树莓派ip前三位不一样,所以需要先给虚拟机手动设置一个静态ip。 一、虚拟机设置静态ip(非必须) 1.1 虚拟机设置静态ip sudo nano /etc/netplan/01-netcfg.yaml 把下面内容加进去 network:version: 2renderer: networkde…

SpringBoot自动装配过程

Spring Boot的自动装配过程是一个基于注解和条件配置的自动化过程。它依赖于spring.factories文件中的自动配置类列表并结合条件注解和组件扫描来实现灵活且强大的自动装配功能。这使得开发者可以专注于业务逻辑的实现,而无需处理繁琐的配置细节。 1,启动类上@SpringBootApp…

北斗有源终端|智能5G单北斗终端|单兵|单北斗|手持机

在当今科技日新月异的时代,智能设备的创新与升级速度令人目不暇接。其中,智能5G终端作为连接数字世界的桥梁,正逐步渗透到我们生活的方方面面。今天,让我们聚焦于一款集尖端科技与实用功能于一身的智能5G设备——QM-L5智能5G单北斗…

操作系统(9) (并发-----原子性/互斥临界区/生产者消费者问题/临界区问题三条件/互斥性/进展性/公平性)

目录 1. 并发(Concurrency)的定义 2. 原子性(Atomicity) 3. 互斥(Mutual Exclusion) 4. 生产者-消费者问题(Producer-Consumer Problem) 5. 临界区Critical Section 6. 临界区问题&#xf…

Vue进阶指南:Watch 和 Computed 的深度理解

前言 在 Vue.js 开发中,我们常常会用到 watch 和 computed。虽然它们都能用来监听和处理数据的变化,但在使用场景和性能上有显著的区别。本篇文章会通过通俗易懂的方式给你讲解 Vue.js 中 watch 和 computed 的区别和使用方法。 基本概念 Computed&am…

如何对数据库的表字段加密解密处理?

对于表格数据的加密处理,通常涉及到对数据库中存储的数据进行加密,以保护敏感信息。 Java示例(使用AES算法加密数据库表数据) 首先,你需要一个数据库连接,这里假设你使用的是JDBC连接MySQL数据库。以下是…

【AI+教育】一些记录@2024.11.04

一、尝新 今天尝试了使用九章随时问,起因是看到快刀青衣的AI产品好用榜,里面这么介绍九章随时问:「它不是像其他产品那样,直接给你出答案。而是跟你语音对话,你会感觉更像是有一位老师坐在你的旁边,一步步…