redis大key和热key
redis中大key、热key
- 什么是大key
- 大key可能产生的原因
- 大key可能会造成什么影响
- 如何检测大key
- 如何优化
- 删除大key时可能的问题
- 删除大key的策略
- 热key
- 热key可能导致的问题
- 解决热key的方法
什么是大key
大key通常是指占用内存空间过大或包含大量元素的键值对。
- 数据量大:存储的单个值(如字符串、列表、集合、哈希等)本身比较大。比如一个哈希里面有大量的K-V、一个字符串长文本等。
- 元素数量多:对于列表、集合、有序集合等数据结构,如果他们包含的元素非常多,也是大key。
- 嵌套结构复杂:当数据结构嵌套了很多层,整体内存占用较多。比如一个哈希里面某些字段又是哈希…。
具体多大才算大key没有固定标准,需要根据redis配置和业务需求来判定。一般来说,字符串类型key对应的value占用空间大于1M,集合类型元素数量超过5000个都可以视为大key。
大key可能产生的原因
- 程序设计不当或业务数据规模考虑不周
- 未及时清理垃圾数据
- 数据结构选择不合理
- 缺乏监控和管理
大key可能会造成什么影响
- 内存占用过高:占用大量内存,可能导致redis实例内存使用率升高。内存占用过高会触发redis内存淘汰策略,内存淘汰时可能会导致某些数据被意外删除从而影响正常业务。极端一点,内存耗尽导致redis实例崩溃导致服务中断。
- 内存碎片:内存碎片会降低内存使用率,使得即使有足够的空闲内存也无法为新数据分配连续的内存空间。
- 阻塞单线程:redis执行命令的时候是单线程,对大key进行读写操作时会更耗时,也就阻塞了其他的客服端请求。
- 网络拥塞:大key传输的网络流量就更大,更占网络宽带,导致网络堵塞,影响其他的请求。
- 主从同步延迟:大key网络传输的时间更长,增加网络传输的时间。
- 数据倾斜:redis集群中,如果某个节点上大key过多,该节点内存使用率就更高,集群资源就分布不均衡。
如何检测大key
- bigkeys命令:这是redis自带的命令,扫描整个库并统计每一种数据类型(string、list、set、zset、hash)中最大的那个key。它只能找每种类型最大的那一个key,不能找超过某个阈值的所有key。它是基于scan命令实现的,所以不会阻塞redis服务器。
- MEMORY USAGE命令(Redis 4.0及以上版本):它可以返回指定key的内存使用情况(字节为单位)。通过遍历所有的key可以找出大key。但是对于list、set等数据结构,它返回的是近似值,因为它采用抽样方式来估算内存使用。
- DEBUG OBJECT命令:它返回指定key的详细信息,包含可以的类型、编码方式、序列化后的长度等。但它可能会对redis服务器的性能产生一点的影响,生产环境不建议使用。
- 使用第三方工具:
a.redis-rdb-tools
:这是python编写的工具,用于解析redis的RDB快照文件,不仅可以提供每个key的大小信息,还能将结果导出为cvs文件。
b.go-redis-bigkv
:基于memory命令开发的go语言工具,用于扫描所有的key,并根据内存大小排序。可以把排序结果输出到txt文件中方便查看。
c.Redis Bigkeys插件
:用于分析redis大key的插件,扫描整个数据库,找出占用内存较大的key并输出。安装配置该插件后可以使用BIGKEYS命令来查找大key。 - 使用SCAN命令遍历:遍历所有的key,通过设置不同的MATCH和COUNT选项可以控制遍历的速度和范围。遍历过程中可以结合上述的MEMORY USAGE或TYPE等命令来获取每个key的大小和类型信息,从而筛选出大key。
检测大key时,应该尽量避免对redis服务器产生太大的影响。比如在从节点检测、在业务低峰时检测等。
如何优化
- 拆分大key:将大key拆分成多个小key,减少单个key的内存占用来提高查询性能。
- 使用压缩算法:对于一些可以压缩的数据类型,可以使用压缩算法来压缩减少内存占用。Redis本身支持一些压缩算法,如LZF(Lempel-Ziv-Fast)压缩算法。
- 设置过期时间:如果数据不是一直都需要的,可以设置过期时间,让redis自动删除该key,避免长期无效占用内存。
- 监控预警:建立监控预警机制,及时发现及时处理。可以使用Redis的监控工具,如Redis Insights、Prometheus等,设置对大key和内存使用的监控指标。
删除大key时可能的问题
- 阻塞redis服务:redis是单线程执行命令的,删除大key时耗时较长会阻塞其他请求。
- 内存释放问题:直接删除大key会导致大量内存被瞬间释放,对操作系统的的内存管理产生压力。删除大key导致的内存碎片,操作系统在处理这些内存碎片时会消耗一点的cpu资源。
- 网络流量消耗:存储在redis集群的大key,删除时会产生较大的网络流量。
删除大key的策略
- 分批删除:对于集合类型的大key,可以分批删除。每次删除一部分元素,最终完全删除这个大key。比如一个有1W元素的list,一次删除1K个元素,元素分多次删除,最终再删除这个key。
- 使用UNLINK命令:redis4.0版本开始,引入UNLINK命令来异步删除key。它会将key立即从数据库中删除,但实际释放内存的工作是后台线程来异步执行的。可以避免删除大key时阻塞redis的正常服务。
- 业务低峰时删除:
- 先重命名再删除:在删除前先将其重命名为一个不被使用的key,使其不会被业务系统访问到,然后再逐步删除这个重命名后的key。避免在删除过程中因为业务系统访问到该key而导致阻塞和错误。
热key
热key是指被频繁访问的key。
热key可能导致的问题
- 高并发访问:一个key被大量并发访问,对redis服务器性能产生压力。由于redis单线程,高并发访问导致响应变慢甚至无响应。
- 延迟增加:redis处理大量热key,导致redis服务整体的响应时间增加。
- 内存压力:频繁访问热key占用大量内存空间,导致redis内存使用率升高。内存使用率升高触发内存溢出甚至崩溃。
- 负载不均衡:当一个节点存在大量热key时,该节点负载非常高,其他节点相对空闲,导致redis集群整体性能下降,导致某些节点出现性能问题。
解决热key的方法
- 缓存分片:将热key分散到多个redis节点,减轻单个节点的压力。可以采用hash算法或一致性哈希算法将热key映射到不同的节点。
- 缓存过期策略:根据业务需求和访问频率设置不同的过期时间。
- 缓存预热:系统启动时预热一部分热key,将其加载到本地内存中。
相关文章:
redis大key和热key
redis中大key、热key 什么是大key大key可能产生的原因大key可能会造成什么影响如何检测大key如何优化删除大key时可能的问题删除大key的策略 热key热key可能导致的问题解决热key的方法 什么是大key 大key通常是指占用内存空间过大或包含大量元素的键值对。 数据量大ÿ…...
Dubbo 最基础的 RPC 应用(使用 ZooKeeper)
看国内的一些项目时 Dubbo 这个词经常闪现,一直也不以为然,未作搜索,当然也不知道它是做什么用的。直到最近阅读关于大型网站架构相关的书中反复提到 Dubbo 后,觉得不能再对它视而不见。Google 了一下,它是在阿里巴巴创…...
科技赋能:企业如何通过新技术提升竞争力的策略与实践
引言 在当今瞬息万变的商业环境中,科技的迅猛发展正在重新定义行业的游戏规则。无论是小型企业还是跨国巨头,都感受到数字化转型的迫切需求。过去,企业竞争力更多依赖于成本控制、资源调配或市场覆盖,而如今,新技术的引…...
从0开始深度学习(33)——循环神经网络的简洁实现
本章使用Pytorch的API实现RNN上的语言模型训练 0 导入库 import torch import torch.nn as nn import torch.nn.functional as F from torch.utils.data import Dataset, DataLoader from collections import Counter import re import math from tqdm import tqdm1 准备数据 …...
【FAQ】HarmonyOS SDK 闭源开放能力 — 公共模块
1.问题描述: 文档哪里能找到所有的权限查看该权限是用户级的还是系统级的。 解决方案: 您好,可以看一下下方链接是否可以解决问题: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/permissions-for-all-V…...
百度 文心一言 vs 阿里 通义千问 哪个好?
背景介绍: 在当前的人工智能领域,随着大模型技术的快速发展,市场上涌现出了众多的大规模语言模型。然而,由于缺乏统一且权威的评估标准,很多关于这些模型能力的文章往往基于主观测试或自行设定的排行榜来评价模型性能…...
内网不出网上线cs
一:本地正向代理目标 如下,本地(10.211.55.2)挂好了基于 reGeorg 的 http 正向代理。代理为: Socks5 10.211.55.2 1080python2 reGeorgSocksProxy.py -l 0.0.0.0 -p 1080 -u http://10.211.55.3:8080/shiro/tunnel.jsp 二:虚拟机配置proxifer 我们是…...
ubuntu22开机自动登陆和开机自动运行google浏览器自动打开网页
一、开机自动登陆 1、打开settings->点击Users 重启系统即可自动登陆桌面 二、开机自动运行google浏览器自动打开网页 1、安装google浏览器 sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i ./google-chrome-stable…...
企业建站高性能的内容管理系统
AnQiCMS 是一款高性能的内容管理系统,基于Go语言开发。它支持多站点、多语言管理,提供灵活的内容发布和模板管理功能,同时,系统内置丰富的利于SEO操作的功能,支持包括自定义字段、文档分类、批量导入导出等功能 AnQiC…...
【爬虫框架:feapder,管理系统 feaplat】
github:https://github.com/Boris-code/feapder 爬虫管理系统 feaplat:http://feapder.com/#/feapder_platform/feaplat 爬虫在线工具库 :http://www.spidertools.cn :https://www.kgtools.cn/1、feapder 简介 对于学习 Python…...
faiss库中ivf-sq(ScalarQuantizer,标量量化)代码解读-5
训练过程 通过gdb调试得到这个ivfsq的训练过程,我尝试对这个内容具体训练过程进行解析,对每个调用栈里面的逻辑和代码进行解读。 步骤函数名称调用位置说明1faiss::IndexIVF::train/faiss/IndexIVF.cpp:1143开始训练,判断是否需要训练第一级…...
代码随想录算法训练营第六十天|Day60 图论
Bellman_ford 队列优化算法(又名SPFA) https://www.programmercarl.com/kamacoder/0094.%E5%9F%8E%E5%B8%82%E9%97%B4%E8%B4%A7%E7%89%A9%E8%BF%90%E8%BE%93I-SPFA.html 本题我们来系统讲解 Bellman_ford 队列优化算法 ,也叫SPFA算法…...
在嵌入式Linux下如何用QT开发UI
在嵌入式 Linux 环境下使用 Qt 开发用户界面 (UI) 是一个常见的选择。Qt 提供了丰富的功能、跨平台支持以及优秀的图形界面开发能力,非常适合用于嵌入式系统。以下是开发流程的详细步骤: 1. 准备开发环境 硬件环境 一块运行嵌入式 Linux 的开发板&…...
【JavaScript】Promise详解
Promise 是 JavaScript 中处理异步操作的一种强大机制。它提供了一种更清晰、更可控的方式来处理异步代码,避免了回调地狱(callback hell)和复杂的错误处理。 基本概念 状态: Pending:初始状态,既不是成功…...
1062 Talent and Virtue
About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about peoples talent and virtue. According to his theory, a man being outstanding in both talent and virtue must be a "sage(圣人)"…...
C++《二叉搜索树》
在初阶数据结构中我学习了树基础的概念以及了解了顺序结构的二叉树——堆和链式结构二叉树该如何实现,那么接下来我们将进一步的学习二叉树,在此会先后学习到二叉搜索树、AVL树、红黑树;通过这些的学习将让我们更易于理解后面set、map、哈希等…...
机器学习-神经网络(BP神经网络前向和反向传播推导)
1.1 神经元模型 神经网络(neural networks)方面的研究很早就已出现,今天“神经网络”已是一个相当大的、多学科交叉的学科领域.各相关学科对神经网络的定义多种多样,本书采用目前使用得最广泛的一种,即“神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够…...
基于智能物联网关的车辆超重AI检测应用
超重超载是严重的交通违法行为,超重超载车辆的交通安全风险极高,像是一颗行走的“不定时炸弹”,威胁着社会公众的安全。但总有一些人受到利益驱使,使超重超载的违法违规行为时有发生。 随着物联网和AI技术的发展,针对预…...
记录pbootcms提示:登录失败:表单提交校验失败,请刷新后重试的解决办法
问题描述 pbootcms后台登录的时候提示“登录失败:表单提交校验失败,请刷新后重试!” 解决办法 删除runtime目录,或尝试切换PHP版本,选择7.3或5.6一般就能解决了。...
【JavaScript】同步异步详解
同步和异步是编程中处理任务执行顺序的两种不同方式。理解这两种概念对于编写高效和响应式的应用程序至关重要。 同步(Synchronous) 定义:同步操作是指一个任务必须在下一个任务开始之前完成。换句话说,代码按顺序执行ÿ…...
vue 使用el-button 如何实现多个button 单选
在 Vue 中,如果你想要实现多个 el-button 按钮的 单选(即只能选择一个按钮),可以通过绑定 v-model 或使用事件来处理按钮的选中状态。 下面是两种实现方式,分别使用 v-model 和事件监听来实现单选按钮效果:…...
HarmonyOS-初级(二)
文章目录 应用程序框架UIAbilityArkUI框架 🏡作者主页:点击! 🤖HarmonyOS专栏:点击! ⏰️创作时间:2024年11月28日13点10分 应用程序框架 应用程序框架可以被看做是应用模型的一种实现方式。 …...
Unity开启外部EXE程序
Unity开启外部EXE using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading.Tasks; using UnityEditor; using UnityEngine;public class Unity_OpenExe : Mono…...
CTF之密码学(埃特巴什码 )
一、基本原理 埃特巴什码的原理是:字母表中的最后一个字母代表第一个字母,倒数第二个字母代表第二个字母,以此类推。在罗马字母表中,对应关系如下: 常文(明文):A B C D E F G H I …...
深入解析 PyTorch 的 torch.load() 函数:用法、参数与实际应用示例
深入解析 PyTorch 的 torch.load() 函数:用法、参数与实际应用示例 函数 torch.load() 是一个在PyTorch中用于加载通过 torch.save() 保存的序列化对象的核心功能。这个函数广泛应用于加载预训练模型、模型的状态字典(state dictionaries)、…...
ros2键盘实现车辆: 简单的油门_刹车_挡位_前后左右移动控制
参考: ROS python 实现键盘控制 底盘移动 https://blog.csdn.net/u011326325/article/details/131609340游戏手柄控制 1.背景与需求 1.之前实现过 键盘控制 底盘移动的程序, 底盘是线速度控制, 效果还不错. 2.新的底盘 只支持油门控制, 使用线速度控制问题比较多, 和底盘适配…...
ubuntu安装chrome无法打开问题
如果在ubuntu安装chrome后,点击chrome打开没反应,可以先试着在terminal上用命令打开 google-chrome 如果运行命令显示 Chrome has locked the profile so that it doesnt get corrupted. If you are sure no other processes are using this profile…...
CTF-RE 从0到N:Chacha20逆向实战 2024 强网杯青少年专项赛 EnterGame WP (END)
只想解题的看最后就好了,前面是算法分析 Chacha20 c语言是如何利用逻辑运算符拆分变量和合并的 通过百度网盘分享的文件:EnterGame_9acdc7c33f85832082adc6a4e... 链接:https://pan.baidu.com/s/182SRj2Xemo63PCoaLNUsRQ?pwd1111 提取码:1…...
vue3 ajax获取json数组排序举例
使用axios获取接口数据 可以在代码中安装axios包,并写入到package.json文件: npm install axios -S接口调用代码举例如下: const fetchScore async () > {try {const res await axios.get(http://127.0.0.1:8000/score/${userInput.v…...
web安全之信息收集
在信息收集中,最主要是就是收集服务器的配置信息和网站的敏感信息,其中包括域名及子域名信息,目标网站系统,CMS指纹,目标网站真实IP,开放端口等。换句话说,只要是与目标网站相关的信息,我们都应该去尽量搜集。 1.1收集域名信息 知道目标的域名之后,获取域名的注册信…...
建设信用网站的目的/游戏推广
与struts2对比 区别1补充 我们看一下servlet和filter的区别和联系 概念: 1.servlet:运行服务器端的java应用程序,工作在客户端请求与服务器相应的中间层2.filter: 复用代码片段,转换http请求,相应和头信息.filter不能像servlet,不能产生一个请求或者响应,只修改对某一资源的…...
淘宝搜索框去什么网站做/昆山seo网站优化软件
网络市场推广人员所要面对的一个普遍问题就是,如何影响搜索引擎正确收录他们的网站,并且当人们使用相关的搜索原则进行查找的时候,让他们的网站能够展现出来。 知道搜索引擎怎么对待和处理你的网站,并能做好持续性的评估和把…...
wordpress 西部数码/百度推广关键词怎么优化
给树莓派搭配显示器和键鼠后,它就是台电脑了。如果没有显示器,你也可以借助软件通过SSH远程登陆,这种方式是不会显示树莓派桌面的。 通过屏幕利用键鼠或者通过SSH登陆树莓派,对其安装相关软件后,可使用Windows自带的远…...
云落 wordpress/seo排名软件价格
react本身具有防范xss攻击功能,会自动转移字符串里HTML代码。 实现HTML标签功能方法: <div dangerouslySetInnerHTML{{__html: 从后台拿到字符串类型的标签}} /> 否则,应该是json,array类型,那么: re…...
网络架构有几层/seo综合查询平台
ObjectARX为AutoCAD平台下开发,意味着你省去了AutoCAD平台的研究,这个平台的使用不能说完美,但,多少年的积累下来和世界各地的反馈意见,实属精品系列了。 一个好的平台并不能包罗万象,通用的东西有了&…...
什么网站可以接单做设计/seo扣费系统源码
相关文章: 小议 Java 类的初始化 文章目录编译期常量运行时常量相关助记符附:常量入栈指令References关于常量,在《Java 核心技术 卷 I》中是这么定义的:在 Java 中,利用关键字 final 指示常量。一旦被赋值之后&#…...