首页 > 数据库 >Redis 的大 key 如何处理

Redis 的大 key 如何处理

时间:2023-08-10 17:14:58浏览次数:33  
标签:Hash key 处理 Redis 阻塞 Key 数据

介绍 

大key 并不是指 key 的值很大,而是 key 对应的 value 很大(非常占内存)

一般而言,下面这两种情况被称为大 key:

  • String 类型的值大于 10 KB;
  • Hash、List、Set、ZSet 类型的元素的个数超过 5000个;

为什么会出现大key

  1. 数据结构不合理:当使用 Redis 的字符串类型存储较大的数据时,如果没有合适地切分数据,就会导致一个 Key 的值过大。例如,将整个文本内容存储在一个字符串类型的 Key 中。

  2. 批量写入数据:在进行大规模写入操作时,如果将大量的数据一次性写入到一个 Key 中,就会导致大 Key 的问题。这种情况常见于批量导入数据或者数据迁移的场景。缓存数据失效策略不当:

  3. 如果缓存的数据失效策略不合理,导致某个Key的数据长时间没有被清除,就可能导致该Key变得很大。这可能是由于没有设置合理的过期时间或没有及时删除过期的数据。

大 key 会带来以下四种影响:

  • 客户端超时阻塞。由于 Redis 执行命令是单线程处理,然后在操作大 key 时会比较耗时,那么就会阻塞 Redis,从客户端这一视角看,就是很久很久都没有响应。
  • 引发网络阻塞。每次获取大 key 产生的网络流量较大,如果一个 key 的大小是 1 MB,每秒访问量为 1000,那么每秒会产生 1000MB 的流量,这对于普通千兆网卡的服务器来说是灾难性的。
  • 阻塞工作线程。如果使用 del 删除大 key 时,会阻塞工作线程,这样就没办法处理后续的命令。
  • 内存分布不均。集群模型在 slot 分片均匀情况下,会出现数据和查询倾斜情况,部分有大 key 的 Redis 节点占用内存多,QPS 也会比较大。

如何找到大 key

使用 RdbTools 工具查找大 key

使用 RdbTools 第三方开源工具,可以用来解析 Redis 快照(RDB)文件,找到其中的大 key。

比如,下面这条命令,将大于 10 kb 的  key  输出到一个表格文件。

rdb dump.rdb -c memory --bytes 10240 -f redis.csv

如何删除大 key

这个过程本身需要一定时间,而且会阻塞当前释放内存的应用程序

这里给出两种方法:

  • 分批次删除
  • 异步删除(Redis 4.0版本以上):用 unlink 命令代替 del 来删除

为了解决大 Key 问题,可以采取以下几种方式:

  1. 分割大 Key:将一个大 Key 的值分割成多个小 Key,然后分别存储。例如,将一个大的字符串分割为多个小的字符串片段,然后分别以不同的 Key 存储。这样可以避免一个大 Key 导致的性能问题。

  2. 使用 Hash 数据结构:将大 Key 的值存储在 Hash 数据结构中,其中 Hash 的 field 作为子 Key,value 作为 value。这样可以将大 Key 分割成多个子 Key,每个子 Key 在 Hash 中都是独立的,这样可以减少对单个 Key 的访问。

  3. 使用 Redis 的分布式特性:通过使用 Redis 的分片或者集群功能,将大 Key 的数据分布到不同的 Redis 实例或节点上。这样可以利用多个实例或节点的性能来处理大 Key,减少单个实例或节点的负载。

 

标签:Hash,key,处理,Redis,阻塞,Key,数据
From: https://www.cnblogs.com/namudelong/p/17620861.html

相关文章

  • Go语言中字符串处理
    Go语言为字符串处理提供了丰富的功能。以下是处理字符串的一些常见方法和函数:基本操作:获取字符串长度:len(str)字符串连接:str1+str2访问特定字符(字节):str[index]字符串包(strings包):检查字符串是否包含子串:strings.Contains(str,substr)字符串比较:strings.Com......
  • Redis哨兵机制
    Redis哨兵机制:保障高可用性的守护者在现代分布式系统中,高可用性是至关重要的。Redis作为一个高性能的内存数据库,也需要确保在发生故障时能够保持可用。为了实现这一目标,Redis引入了哨兵机制,这是一个监控和管理Redis实例的分布式系统。本文将深入探讨Redis哨兵机制的工作原理、角色......
  • 一种基于Nginx的热点数据调度处理方法
    本文分享自天翼云开发者社区《一种基于Nginx的热点数据调度处理方法》,作者:康****彬一、应用场景  基于Nginx的热点数据调度处理,热点节点数据负载均衡处理,减少热点节点压力,提高处理和访问效率;每一个节点的nginx服务接收大量的访问,但是每个节点处理请求都有一个峰值,当请求数......
  • 百度WebUploader 大文件分片上传处理
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。 二、Range  用于请求头......
  • 数字图像处理基础
    数字图像的感知和获取图像是光与场景中的物质相互作用形成的,物质会对光进行反射与吸收一幅图像记录的是物体辐射能量的空间分布:\[I=f(x,y,z,\lambda,t)\]这个函数是描述光强关于空间位置,频率,时间的一般我们讨论的是平面单色静止图像,因此一个空间维度和后面的频率维度,时间维......
  • Nginx 大文件分片上传处理
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • 什么是Redis,如何使用Redis,SpringBoot如何集成Redis
    官网链接:Redis首先简单理解一下1、什么是redisredis是一种开源的、内存中数据结构存储,用作数据库、缓存和消息代理。redis数据结构包含五大数据类型:字符串、散列、列表、集合、带范围查询的排序集合以及三大特殊数据类型:位图、超级日志、地理空间索引。redis内置复制、Lua脚本......
  • 同步辐射散射数据处理分析方法及过程
    同步辐射散射数据处理分析方法及过程同步辐射散射测试是一种先进的材料表征技术,已广泛应用于材料科学、生物学、化学等领域。同步辐射散射技术利用同步辐射光源产生的高亮度辐射,通过散射实验来研究样品的结构、形态和动态行为。同步辐射散射数据处理分析方法:同步辐射散射实验通常包......
  • Windows11安装python模块transformers报错Long Path处理
    Windows11安装python模块transformers报错,报错信息如下ERROR:CouldnotinstallpackagesduetoanOSError:[Errno2]Nosuchfileordirectory:'C:\\Users\\27467\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCac......
  • c#.net 大文件分片上传处理
    ​ IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag        客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续......