Redis之bigkey

目录

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.mzph.cn/news/624977.shtml

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

相关文章

ERP简要数据模型

1. 人力资源管理模块数据模型: -- 创建员工信息表 CREATE TABLE employee (employee_id INT PRIMARY KEY AUTO_INCREMENT,first_name VARCHAR(50) NOT NULL,last_name VARCHAR(50) NOT NULL,gender ENUM(Male, Female, Other),birth_date DATE,email VARCHAR(100),…

前端导致浏览器奔溃原因分析

内存泄漏 内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。(程序某个未使用的变量或者方法,长期占…

使用WAF防御网络上的隐蔽威胁之CSRF攻击

在网络安全领域,除了常见的XSS(跨站脚本)攻击外,CSRF(跨站请求伪造)攻击也是一种常见且危险的威胁。这种攻击利用用户已经验证的身份在没有用户知情的情况下,执行非授权的操作。了解CSRF攻击的机…

Vue:webStorage简介

一、存储 存储内容大小一般支持5MB左右(不同浏览器可能还不一样) 浏览器端通过 Window.sessionStorage 和 Window.localStorage 属性来实现本地存储机制。 二、API xxxxxStorage.setItem(key, value); 该方法接受一个键和值作为参数,会把…

python多版本工具miniconda的配置优化

conda比较重,所以我用了miniconda,切换python版本也足够方便。 安装miniconda的步骤请自行搜索。 1.添加path环境变量 如下三个路径添加到path环境中,前缀按实际情况修改 miniconda安装目录 miniconda安装目录\Scripts miniconda安装目录\…

2.3数据链路层01

2.3数据链路层 2.3.1数据链路层概述 1、数据链路层在网络体系结构中所处的地位 如下图所示:主机H1给主机H2发送数据,中间要经过三个路由器、电话网、局域网、广域网等多种网络。 从五层协议原理体系结构的角度来看,主机应该具有体系结构中…

数据结构初阶之插入排序与希尔排序详解

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 Linux 欢迎大家点赞,评论,收藏。 一起努力,共赴大厂。 目录 一.前言 二.插入排序 …

深入浅出Pytorch宝典1.0

文章目录 前言1. 张量操作2. 自动微分3. 数据加载和处理4. 模型构建和训练5. 预训练模型和迁移学习6. 调试和性能7. 高级特性总结 torch中主要的数据对象主要特点和功能张量的创建 数据处理和转换1.torch.tensor() 创建一个新的张量(Tensor)2.torch.zero…

YOLOv8训练自己的数据集

文章目录 1. 创建数据集文件结构数据集标注脚本分割数据集转换数据格式 2. 配置文件2.1 数据集配置2.2 选择需要的模型 3. 模型训练4. 测试 1. 创建数据集 环境: Ultralytics YOLOv8.0.230 🚀 Python-3.8.18 torch-2.3.0.dev20231226cu118 CUDA:0 (NVIDI…

嵌入式linux_C应用学习之API函数

1.文件IO 1.1 open打开文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);pathname&#xff1a;字符串类型&#xff0c;用于标…

代码随想录算法训练营第六天| 哈希表理论基础、242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

常见的三种哈希结构&#xff1a;vector数组、set &#xff08;集合&#xff09;、map(映射) 哈希表理论基础 常见的三种哈希结构&#xff1a;vector数组、set &#xff08;集合&#xff09;、map(映射) 242.有效的字母异位词 固定类别的存储内查找用固定大小的vector&#xff1…

Pandas实战100例 | 案例 49: 数值运算

案例 49: 数值运算 知识点讲解 Pandas 提供了进行基本数学运算的简便方法&#xff0c;允许你在 DataFrame 的列之间执行加法、减法、乘法和除法等操作。 数值运算: 直接对 DataFrame 的列应用算术运算符&#xff08;, -, *, /&#xff09;可以执行相应的数值运算。 示例代码…

【DDR】基于Verilog的DDR控制器的简单实现(三)——读操作

上一节 【DDR】基于Verilog的DDR控制器的简单实现&#xff08;二&#xff09;——写操作 本文继续以美光(Micron&#xff09;公司生产的DDR3芯片MT41J512M8RH-093&#xff08;芯片手册&#xff09;为例&#xff0c;说明DDR芯片的读操作过程。下图为读操作指令格式&#xff08;…

市场复盘总结 20240115

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 昨日主题投资 连板进级率 0% 失效 二进三&#xff1a; 进级率 中位数50% 最常用的二种方法&#xff1a; 方…

C语言代码 计算1!+2!+3!+4!+5!+6!+7!+8!+9!+10!

计算1!2!3!4!5!6!7!8!9!10! 代码示例&#xff1a; #include <stdio.h> int main() {int i 0;int n 0;int ret 1;int sum 0;for (n 1; n < 10; n){ret 1;for (i 1; i < n; i){ret ret * i;}sum sum ret;}printf("%d\n", sum);return 0; } 运…

记录centos7.9 离线安装fastllm 编译遇到的问题

centos7.9 安装fastllm 编译步骤 Step1安装cmake: 参考: https://bitsanddragons.wordpress.com/2022/09/19/error-cmake-3-1-or-higher-is-required-you-are-running-version-on-centos-7-x/ ​ 问题1&#xff1a;/lib64/libstdc.so.6: version GLIBCXX_3.4.20‘ not found …

解决Qt的release构建下无法进入断点调试的问题

在工作的时候遇到了第三方库只提供release版本的库的情况&#xff0c;我需要在这基础上封装一层自家库&#xff0c;在调试的时候遇到如下问题&#xff0c;但是在Qt环境下&#xff0c;release的库只能在进行release构建和调试。 卡在了一直进不了断点的情况。提示内容如下&#…

数据库知识汇总之MySQL

目录 MySQL数据库特点MySQL下载MySQL配置文件初始化MySQL配置安装MySQL服务 启动MySQL服务登录数据库修改数据库登录密码MySQL错误代码1130 MySQL数据库特点 MySQL是一个开源关系型数据库管理系统(RDBMS)&#xff0c;由Oracle公司维护和开发。它使用SQL语言进行数据库管理和操…

Flink常见异常解决办法

Flink启动报错 Caused by: java.lang.NoSuchMethodError: org.apache.flink.api.common.functions.RuntimeContext.getMetricGroup()Lorg/apache/flink/metrics/groups/OperatorMetricGroup;...at org.apache.flink.api.common.functions.util.FunctionUtils.openFunction(Fun…

DA14531-外设驱动篇-I2C通信应用

文章目录 1.I2C通信应用相关文件2.宏定义列表3.主要函数接口4.应用代码实例1.I2C通信应用相关文件 1)i2c.c和i2c.h(SDK文件) 2)app_I2cProtocol.c和app_I2cProtocol.h(用户应用文件) 2.宏定义列表 宏定义注解I2C_ADDRESSING_7B7-bit 地址I2C_ADDRESSING_10B10-bit 地址…