Redis的BigKey问题

Redis的BigKey问题

什么是大Key问题?

大key问题其实可以说是大value问题,就是某个key对应的value所占据的存储空间太大了,所以导致我们在操作这个key的时候花费的时间过长(序列化\反序列化),从而降低了redis性能。

  • Key对应的value本身的数据量过大:一个Strring类型的value,值为5MB。
  • Key对应的value的成员数量过多:一个ZSet类型的key,对应的成员数量有10000个。
  • key中成员的数据量过大:一个Hash类型的key,成员数量虽然只有1000个,但是这些成员的总大小太大了。比如达到100MB或者10MB。

单个key的value大小要建议小于10kb,集合类型的key元素数量要小于1000。

带来的问题

网络阻塞: 对大Key执行读请求的时候,少量的QPS就可能导致 带宽使用率 被占满了,导致Redis性能下降,甚至可能导致整个物理机变慢了。

数据倾斜: BigKey所在的Redis实例内存使用率会远超其它实例,无法使数据分片的内存资源达到均衡。

Redis阻塞: 对于元素较多的hash、list、zset等做运算的时候会很耗时,redis又是单线程的,其它请求不会被处理,就会导致主线程阻塞。

CPU压力: Redis中的的数据序列化和反序列化的时候都需要CPU运算,BigKey会导致CPU的使用率飙升,影响Redis实例和本机其它应用的使用。

如何删除BigKey?

由于Redis是单线程的,所以删除一个键值对的时候,如果是bigkey也需要耗费很长时间,导致redis主线程阻塞。 Redis4.0 之后,Redis提供了一个命令unlink,会把该键值对先标记成已删除,然后会去异步地删除该key。如果是 Redis3.0 以前,删除集合类型的话,就先遍历该集合元素,依次删除元素,最后再删除BigKey。

选择合适的数据结构

对于存储一个 对象 ,如果使用json字符串,那么就不够灵活,可以使用Hash结构,既灵活,空间占用也不是很大。

数据量太大的时候,单个hash可能会导致大key问题,hash结构的entry数量尽量不要超过1000;单独用string来存储的话,大量的key又会导致占用太多空间,所以要学会使用 分片哈希 。既节省空间,也避免了大key问题。

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

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

相关文章

TDengine IDMP 产品基本概念

基本概念 元素 (Element) IDMP 通过树状层次结构来组织数据,树状结构里的每个节点被称之为元素 (Element)。元素是一个物理的或逻辑的实体。它可以是具体的物理设备(比如一台汽车),物理设备的一个子系统(比如一台汽车的…

专题二_滑动窗口_将x减到0的最小操作数

一:题目解释:每次只能移除数组的边界,移除的边界的总和为x,要求返回你移除边界的最小操作数!也就是说你最少花几次移除边界,就能够让这些移除的边界的和为x,则返回这个次数!所以这个…

CentOS 7 下通过 Anaconda3 运行llm大模型、deepseek大模型的完整指南

CentOS 7 下通过 Anaconda3 运行llm大模型、deepseek大模型的完整指南A1 CentOS 7 下通过 Anaconda3 运行大模型的完整指南一、环境准备二、创建专用环境三、模型部署与运行四、优化配置常见问题解决B1 CentOS 7 下通过 Anaconda3 使用 CPU 运行 DeepSeek 大模型的完整方案一、…

Flutter应用在Windows 8上正常运行

要让Flutter应用在Windows 8上正常运行,需满足以下前提条件,涵盖系统环境、依赖配置、编译设置等关键环节: 一、系统环境基础要求 Windows 8版本 必须是 Windows 8.1(核心支持),不支持早期Windows 8(需升级到8.1,微软已停止对原版Windows 8的支持)。 确认系统版本:右…

Redis实现消息队列三种方式

参考 Redis队列详解(springboot实战)_redis 队列-CSDN博客 前言 MQ消息队列有很多种,比如RabbitMQ,RocketMQ,Kafka等,但是也可以基于redis来实现,可以降低系统的维护成本和实现复杂度,本篇介绍redis中实现…

【C++动态版本号生成方案:实现类似C# 1.0.* 的自动构建号】

C动态版本号生成方案:实现类似C# 1.0.* 的自动构建号 在C#中,1.0.*版本号格式会在编译时自动生成构建号和修订号。本文将介绍如何在C项目中实现类似功能,通过MSBuild自动化生成基于编译时间的版本号。 实现原理 版本号构成:主版本…

【算法题】:斐波那契数列

用 JavaScript 实现一个 fibonacci 函数,满足: 输入 n(从0开始计数)输出第 n 个斐波那契数(斐波那契数列从 1 开始:1,1,2,3,5,8,13,21…) 示例: fibonacci(0) > 1fibonacci(4) &g…

【YOLOv13[基础]】热力图可视化实践 | 脚本升级 | 优化可视化效果 | 论文必备 | GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM等

本文将进行添加YOLOv13版本的升级版热力图可视化功能的实践,支持图像热力图可视化、优化可视化效果、 可以选择使用GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM, HiResCAM, LayerCAM, RandomCAM, EigenGradCAM。一个参数即可设置是否显示检测框等。 原图 结果图

ElasticSearch相关术语介绍

1.RESTful风格程序REST(英文全称为:"Representational State Transfer")指的是一组架构约束条件和原则。它是一种软件架构风格(约束条件和原则的集合,但并不是标准)。 REST通过资源的角度观察网络,以URI对网络资源进行…

《从零构建大语言模型》学习笔记4,注意力机制1

《从零构建大语言模型》学习笔记4,自注意力机制1 文章目录《从零构建大语言模型》学习笔记4,自注意力机制1前言一、实现一个简单的无训练权重的自注意力机制二、实现具有可训练权重的自注意力机制1. 分步计算注意力权重2.实现自注意力Python类三、将单头…

昇思+昇腾开发板+DeepSeek模型推理和性能优化

昇思昇腾开发板DeepSeek模型推理和性能优化 模型推理 流程: 权重加载 -> 启动推理 -> 效果比较与调优 -> 性能测试 -> 性能优化 权重加载 如微调章节介绍,最终的模型包含两部分:base model 和 LoRA adapter,其中base …

未给任务“Fody.WeavingTask”的必需参数“IntermediateDir”赋值。 WpfTreeView

c#专栏记录: 报错 未给任务“Fody.WeavingTask”的必需参数“IntermediateDir”赋值。 WpfTreeView 生成 解决办法 清理和重新生成项目 完成上述配置后,尝试执行以下步骤: 清理项目:删除 bin 和 obj 文件夹。 重新生成项目&…

[Linux]学习笔记系列 -- [arm][lib]

文章目录arch/arm/lib/delay.cregister_current_timer_delay 注册当前定时器延迟read_current_timer 读取当前定时器drivers/clocksource/timer-stm32.cstm32_clocksource_init STM32 平台上初始化时钟源https://github.com/wdfk-prog/linux-study arch/arm/lib/delay.c regis…

harbor仓库搭建(配置https)

目录 1. 环境准备 2. 配置https的原因 3. 生成ca证书 4. 搭建harbor仓库 5. 访问harbor 6. 修改加密算法 1. 环境准备 需要提前安装docker和docker-compose,harbor仓库版本越新,对应的docker和docker-compose版本越新。 主机IP192.168.48.19dock…

C++多线程服务器

C多线程服务器 因为自己同时在看多本书,之前看过《TCP/IP 网络编程》一书,其中有一个自己编写一个多线程服务器的例子,于是就把代码直接抄了一变。 在学习网络编程前需要先了解网络的7层模型。 具体代码如下: 服务器端&#xff1a…

【Pandas】常用数据处理技巧

一. 数据读取 1.pd.to_csv & pd.read_csv 细节: 1.pd.read_csv 需要 ignore_index True or ,index_col0 否则会有列Unnamed0 2.pickle具有更快的读取速度,与更小的体积。 读取前N行(若不需获取所有数据) pd.read_csv(…

Docker Compose 部署高可用 MongoDB 副本集集群(含 Keepalived + HAProxy 负载均衡)

Docker Compose 部署高可用 MongoDB 副本集集群(含 Keepalived HAProxy 负载均衡)背景与目标📋 环境规划**服务器信息****软件版本**部署步骤1. 创建目录结构2、生成 keyFile(三台机器内容必须一致)3. 准备 Keepalive…

MySQL(189)如何分析MySQL的锁等待问题?

分析MySQL的锁等待问题有助于发现和解决数据库性能瓶颈。锁等待问题通常会导致数据库响应时间变长,影响系统的整体性能。以下是详细深入的方法和代码示例,帮助你分析和解决MySQL的锁等待问题。 一、锁的类型和概念 在MySQL中,主要有以下几种锁…

26.Scikit-learn实战:机器学习的工具箱

Scikit-learn实战:机器学习的工具箱 🎯 前言:机器学习界的"宜家家具" 还记得第一次逛宜家的感受吗?琳琅满目的家具,每一件都有详细的说明书,组装简单,样式统一,关键是—…

wordpress文章摘要调用的3种方法

以下是WordPress文章摘要的3种调用方法: 1. 使用the_excerpt()函数 这是WordPress自带的函数,用于调用文章摘要。如果文章有手动填写的摘要,则会显示手动摘要;如果没有手动摘要,WordPress会自动从文章内容中提取前55个单词作为摘…