Redis之bigkey

news2024/9/28 17:23:25

目录

1、什么是bigkey?

2、bigkey大的小

3、bigkey有哪些危害?

4、bigkey如何产生?

5、bigkey如何发现?

6、bigkey如何删除?

7、BigKey调优,惰性释放lazyfree

8、生产上限制keys * /flushdb/flushall等危险命令防止误删误用

9、SCAN命令


1、什么是bigkey?

bigkey通常用来描述存储大量数据的键。 

2、bigkey大的小

根据《阿里云Redis开发规范》string类型大于10KB就是bigkey,list、hash、set和zset,个数超过

5000就是bigkey

3、bigkey有哪些危害?

  1. 内存消耗:大键占用更多的内存空间。由于Redis是一个基于内存的数据库,过多的大键可能导致内存不足或增加运行成本。

  2. 网络传输延迟:当从Redis服务器读取或写入大键时,需要更多的时间和网络带宽来传输数据。这可能会导致响应时间延长,影响性能。

  3. 数据处理效率降低:对大键进行读写操作可能会导致Redis服务器的处理速度变慢,因为它需要花费更多的时间来处理大量的数据。

  4. 持久化备份问题:如果你使用了持久化功能(如RDB快照或AOF日志),大键会增加备份和恢复的时间和存储空间。

  5. 缓存失效问题:如果大键被频繁更新,可能会导致与该键相关的其他缓存项失效,影响缓存系统的效率。

4、bigkey如何产生?

社交类,统计类数据会造成bigkey

5、bigkey如何发现?

1、redis-cli --bigkeys

redis-cli -h 127.0.0.1 -p 6379 -a 111111 -bigkeys

2、MEMORY USAGE

MEMORY USAGE key

MEMORY USAGE是Redis提供的一个命令,用于获取指定键所占用的内存大小。执行该命令后,Redis会返回一个整数值,表示该键占用的内存大小(以字节为单位)。如果键不存在,命令会返回0。

注意:

  1. MEMORY USAGE命令只能用于检查指定键的内存使用情况,无法一次性获取所有键的内存使用情况。

  2. Redis使用了一些特殊的算法来最小化内存的使用,因此实际占用的内存大小可能会比预期小。

  3. 当使用Redis Cluster等分布式环境时,MEMORY USAGE命令只能用于检查本地节点的键的内存使用情况,无法检查整个集群的内存使用情况。

6、bigkey如何删除?

string类型:一般用del,如果过于庞大unlink

hash类型:使用hscan每次获取少量field-value,再使用hdel删除每个field

 list类型:使用ltrim渐进式逐步删除,直到全部删除完成

set类型:使用sscan每次获取部分元素,再使用srem命令删除每个元素

zset类型:使用zscan每次获取部分元素,再使用ZREMRANGEBYRANK命令删除每个元素

7、BigKey调优,惰性释放lazyfree

打开redis.conf配置文件LAZY FREEING相关说明

 

1、lazyfree-lazy-server-del no: 这个选项用于控制Redis服务器删除键时的行为。当设置lazyfree-lazy-server-del选项为no时,服务器会立即删除键,而不延迟删除操作。

2、replica-lazy-flush no: 这个选项用于控制主节点执行FLUSHALL或FLUSHDB命令时是否传播给从节点。当设置了replica-lazy-flush选项为no时,主节点执行这些命令后会将其传播给从节点,使得从节点也执行相同的操作。

3、lazyfree-lazy-user-del no: 这个选项用于控制Redis服务器删除键时的行为,与lazyfree-lazy-server-del选项类似。当设置了lazyfree-lazy-user-del选项为no时,服务器会立即删除键,而不延迟删除操作。

8、生产上限制keys * /flushdb/flushall等危险命令防止误删误用

通过配置设置禁用这些命令,redis.conf在SECURITY这一项中

9、SCAN命令

Redis的SCAN命令用于迭代遍历Redis中的键。它允许逐批返回与指定模式匹配的键。执行SCAN命令后,Redis会返回两个值:下一个迭代器位置和匹配的键列表。

SCAN cursor [MATCH pattern] [COUNT count]
  • cursor:表示迭代器的起始位置。初始时,cursor值设置为0。
  • MATCH pattern(可选):用于指定要匹配的键模式。只有与模式匹配的键才会被返回。
  • COUNT count(可选):指定每次迭代返回的键的数量。默认情况下,Redis会尽量返回所有匹配的键。

 示例:

redis 127.0.0.1:6379> scan 0
1) "17"
2)  1) "key:12"
    2) "key:8"
    3) "key:4"
    4) "key:14"
    5) "key:16"
    6) "key:17"
    7) "key:15"
    8) "key:10"
    9) "key:3"
   10) "key:7"
   11) "key:1"
redis 127.0.0.1:6379> scan 17
1) "0"
2) 1) "key:5"
   2) "key:18"
   3) "key:0"
   4) "key:2"
   5) "key:19"
   6) "key:13"
   7) "key:6"
   8) "key:9"
   9) "key:11"

SCAN返回一个包含两个元素的数组

第一个元素是用于进行下一次迭代的新游标。

第二个元素则是一个数组,这个数组中包含了所有被迭代的元素。如果新游标返回零表示迭代已结束。 

SCAN的遍历顺序:它不是从第一维数组的第零位一直遍历到末尾,而是采用了高位进位加法来遍

历。是为了在字典的扩容和缩容时避免槽位的遍历重复和遗漏。

注意:由于Redis是单线程的,当执行SCAN命令时,Redis服务器可能会阻塞一段时间,直到迭代完成。因此,在处理大型数据库时,建议使用SCAN命令进行分批处理,以避免对服务器性能造成影响。

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

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

相关文章

python爬虫之线程与多进程知识点记录

一、线程 1、概念 线程 在一个进程的内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”叫做线程 是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指…

统计学-R语言-4.1

文章目录 前言编写R函数图形的控制和布局par函数layout函数 练习 前言 安装完R软件之后就可以对其进行代码的编写了。 编写R函数 如果对数据分析有些特殊需要,已有的R包或函数不能满足,可以在R中编写自己的函数。函数的定义格式如下所示: …

DFT新手入门:VASPKIT生成模版INCAR

新手学习VASP计算时一般需要自行准备好VASP所需要的四个输入文件:INCAR POSCAR KPOINTS POTCAR。 其中POSCAR为计算任务的模型文件,POTCAR为与POSCAR中元素所对应的赝势,可根据要求选取。 KPOINTS的设置需要根据精度确定,一般通过vaspkit的1…

鸿蒙开发OpenHarmony组件复用案例

概述 在开发应用时,有些场景下的自定义组件具有相同的组件布局结构,仅有状态变量等承载数据的差异。这样的组件缓存起来,需要使用到该组件时直接复用, 减少重复创建和渲染的时间,从而提高应用页面的加载速度和响应速度…

Win10专业版系统搭建DNS解析服务

Win10专业版 纯新手,也没弄过Linux的。不喜勿喷,有问题请指出 第一天一头雾水整了几个小时没结果,第二天豁然开朗,10分钟明白了第一天的问题所在。 Win10 安卓: iOS: 搭建DNS服务器的意义: 屏蔽…

【Axure高保真原型】移入放大对应区域的饼图

今天和大家分享移入放大对应扇形区域的饼图的原型模板,鼠标移入时,对应扇形区域的会放大,并且的项目和数据弹窗,弹窗可以跟随鼠标移动。这个原型是用Axure原生元件制作的,所以不需要联网或者调用外部图表……具体效果可…

2024年烟花爆竹储存证考试题库及烟花爆竹储存试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年烟花爆竹储存证考试题库及烟花爆竹储存试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大纲随机…

多示例学习 (multi-instance learning, MIL) 学习路线 (归类、重点文章列举、持续更新)

文章目录 0 要点 0 要点 说明:本文在于能够让大家能够更加快速地了解MIL这个领域,因此将从以下几个方面重点介绍MIL: MIL背景介绍;理论MIL概述: 注意力网络;对比学习;介入学习;强化…

sylar高性能服务器-日志(P15-P20)内容记录

以下内容是sylar高性能服务器视频的简单记录,如果你在调试代码时遇到了困难那么下面内容会有帮助。 文章目录 p15:配置变更事件一、函数二、结果展示 p16:日志系统的整合1一、函数二、小结 p17-18:日志系统的整合2、3一、函数二、…

网络命令行工具nc的使用复习

之前写过nc的博文;下面复习一下; 可以把nc放到C:\Windows\System32下; nc -l -p 9007,-l 是监听模式,-p指定端口,作为服务端监听9007端口; nc 127.0.0.1 9007,作为客户端去连接指定…

基于算术电路的全同态加密方案介绍

基于算术电路的全同态加密方案介绍 摘 要: 云计算技术目前已经发展得相对成熟,应用也逐步得到普及,它所具有的强大的数据处理能力,能够帮助个体用户计算复杂的数据。但它带来便利的同时,也催生了一系列用户隐私数据保…

Vue2.组件通信

样式冲突 写在组件中的样式默认会全局生效。容易造成多个组件之间的样式冲突问题。 可以给组件加上scoped属性,让样式只作用于当前组件。 原理: 给当前组件模板的所有元素,加上一个自定义属性data-v-hash值,用以区分不同的组件。…

七大排序(含快排+归并的递归版和非递归版)

文章目录 前言一、冒泡排序二、选择排序三、插入排序四、希尔排序五、堆排序六、快速排序快排的递归方式快排的非递归方式 七、归并排序自上而下的递归自下而上的迭代 总结 前言 排序: 所谓排序,就是使一串记录,按照其中的某个或某些关键字的…

二分图带权最大匹配-KM算法详解

文章目录 零、前言一、红娘再牵线二、二分图带权最大完备匹配2.1二分图带权最大匹配2.2概念2.3KM算法2.3.1交错树2.3.2顶标2.3.3相等子图2.3.4算法原理2.3.5算法实现 三、OJ练习3.1奔小康赚大钱3.2Ants 零、前言 关于二分图:二分图及染色法判定-CSDN博客 关于二分…

Vue + JS + tauri 开发一个简单的PC端桌面应用程序

Vue JS tauri 开发一个简单的PC端桌面应用程序 文章目录 Vue JS tauri 开发一个简单的PC端桌面应用程序1. 环境准备1.1 安装 Microsoft Visual Studio C 生成工具[^2]1.2 安装 Rust[^3] 2. 使用 vite 打包工具创建一个 vue 应用2.1 使用Vite创建前端Vue项目2.2 更改Vite打包…

vue中使用高德地图渲染多个不同类型的点,根据勾选数据 类型不同打点显示隐藏

一、在index.html文件中引入高德地图JavaScript API的2.0版本SDK <script src"https://webapi.amap.com/maps?v2.0&key你的高德地图Key"></script>二、创建一个Vue组件&#xff0c;用于渲染地图和点位 html <template><div class"m…

Axure全面指南:正确打开并高效使用的步骤!

AxureRP是目前流行的设计精美的用户界面和交互软件。AxureRP根据其应用领域提供了一组丰富的UI控制。作为Axure的国内替代品&#xff0c;即时设计可以在线协作&#xff0c;浏览器可以在无需下载客户端的情况下打开和使用。如果以前使用Axure&#xff0c;很容易切换到即时设计。…

记录el-select+el-tree复选框,支持模糊查询,懒加载,树父子节点不关联,不全选

需求&#xff1a;一个机构下拉菜单&#xff0c;一个人员下拉菜单&#xff0c;默认带入当前登录用户的机构和人员。机构下拉菜单为两个接口&#xff0c;模糊查询为一个接口不包含懒加载&#xff0c;默认非模糊查询情况下为一个接口&#xff0c;点击节点懒加载。机构下拉菜单数据…

探索FTP:原理、实践与安全优化

引言 在正式开始讲解之前&#xff0c;首先来了解一下文件存储的类型有哪些。 DAS、SAN和NAS是三种不同的存储架构&#xff0c;分别用于解决不同场景下的数据存储需求。 DAS (Direct Attached Storage 直接附加存储)&#xff1a;DAS 是指将存储设备&#xff08;如硬盘&#x…

线程之间如何传递上下文信息

文章目录 源码解读1. 扩展ThreadPoolExecutor2. 扩展Runnable3. 整体流程 源于工作中一个业务场景的需求。 源码 话不多说&#xff0c;先贴完整的源码&#xff1a; public class ContextPassingBetweenThread {private static ThreadLocal<String> CONTEXT new Thread…