redis7高级篇2 redis的BigKey的处理

news2024/10/5 18:30:27

一 Bigkey的处理

1.1 模拟造数

1.截图

2.代码 :使用pipe 批量插入10w的数据量

cat /root/export/monidata.txt | redis-cli -h 127.0.0.1 -a 123456 -p 6379 --pipe

[root@localhost export]# for((i=1;i<=10*10;i++)); do echo "set k$i v$i" >> /root/export/monidata.txt ;done;
[root@localhost export]# ls
dockertest  dump.rdb  monidata.txt  myredis-data  nacos  nacos-1.4.2  redis-7.0.10  redis-7.0.10.tar.gz  rocketmq-all-4.9.6-bin-release  rocketmq-all-4.9.6-bin-release.zip  servers
[root@localhost export]# cat /root/export/monidata.txt | redis-cli -h 127.0.0.1 -a 123456 -p 6379 --pipe
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 100
[root@localhost export]# 

3.查看

4.查看数据量大小

 1.2 设置禁用一些危险命令

1.线上不能使用 keys *

2.不能使用  flushdb

3.不能使用 flushdball

在redis的redis.conf配置文件中进行修改: 通过搜索关键字: rename-command ;进行修改

rename-command  keys "" ; rename-command flushdb "" ; 

[root@localhost myredis]# vi redis.conf
[root@localhost myredis]# pwd
/myredis

 2.重启服务,查看效果

[root@localhost ~]# redis-server /myredis/redis.conf
[root@localhost ~]# redis-cli -a 123456 -p 6379
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> keys *
(error) ERR unknown command 'keys', with args beginning with: '*' 
127.0.0.1:6379> flushdb 
(error) ERR unknown command 'flushdb', with args beginning with: 
127.0.0.1:6379> 

1.3 大key的判断依据

string类型的key控制在10kb以内,hash,list,set,zset元素的个数不要超过5000
非string的bigkey,不要使用del删除,使用hscan、sscan、zscan等方式进行渐进式删除。

1.4 删除命令逻辑

#string
1.使用del命令 ,超大使用unlink命令
#hash
2.使用hscan每次获取少量的field-value,再使用hdel删除每个field

#list
3.使用ltrim渐进式逐步删除,直到全部删除完成。

#set
4.使用sscan命令获取部分元素,再使用srem命令删除每个元素

#zset
5.使用zscan每次获取部分元素,再使用zremrangebyrank命令删除每个元素

二 scan命令的操作

2.1 使用scan命令查看数据

scan命令用于获取数据库中的键。一次返回的数据不可控,只是大概返回count数。

SCAN 命令是一个基于游标的迭代器,每次被调用之后,都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数,从而让迭代过程延续下,当游标返回  0 时,迭代结束。

语法格式:scan  游标  pattern   count取出的条数

返回值:SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。

案例:

127.0.0.1:6379> scan 0 match  * count 10
1) "120"
2)  1) "k66"
    2) "k49"
    3) "k35"
    4) "k23"
    5) "k12"
    6) "k83"
    7) "k22"
    8) "k36"
    9) "k61"
   10) "k47"
截图:

2.2 scan命令分类用途

Scan命令又细分为:scan命令,Sscan命令、Hscan命令、Zscan命令。

  • scan命令用于迭代字符串中的元素。
  • Sscan命令用于迭代集合键中的元素。
  • Hscan命令用于迭代哈希键中的键值对。
  • Zscan命令用于迭代有序集合中的元素(包括元素成员和元素分值)

三  Bigkey的处理

string类型的key控制在10kb以内,hash,list,set,zset元素的个数不要超过5000
非string的bigkey,不要使用del删除,使用hscan、sscan、zscan等方式进行渐进式删除。

3.1 发现大key的命令

1.使用memory usage 命令

127.0.0.1:6379> memory usage k32
(integer) 56
127.0.0.1:6379> memory usage k100
(integer) 56
127.0.0.1:6379> 

2.使用bigkeys命令

[root@localhost myredis]# redis-cli -h 127.0.0.1 -p 6379 -a 123456 --bigkeys 
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type.  You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).

[00.00%] Biggest string found so far '"k66"' with 3 bytes
[41.00%] Biggest string found so far '"k100"' with 4 bytes

-------- summary -------

Sampled 100 keys in the keyspace!
Total key length in bytes is 292 (avg len 2.92)

Biggest string found '"k100"' has 4 bytes

0 lists with 0 items (00.00% of keys, avg size 0.00)
0 hashs with 0 fields (00.00% of keys, avg size 0.00)
100 strings with 292 bytes (100.00% of keys, avg size 2.92)
0 streams with 0 entries (00.00% of keys, avg size 0.00)
0 sets with 0 members (00.00% of keys, avg size 0.00)
0 zsets with 0 members (00.00% of keys, avg size 0.00)
[root@localhost myredis]# redis-cli -h 127.0.0.1 -p 6739 -a 123456 --bigkeys -l 0.1

 3.2 大key的删除

3.2.1 String类型的删除

一般使用del,如果过于庞大则使用unlink

127.0.0.1:6379> set bj  123
OK
127.0.0.1:6379> get bj
"123"
127.0.0.1:6379> del bj
(integer) 1
127.0.0.1:6379> get bj
(nil)
127.0.0.1:6379> 

3.2.2 Hash数据类型删除

1.使用hscan每次获取少量的field-value,再使用hdel删除每个field

1.查询命令

127.0.0.1:6379> hmset website  ws1 "beijing.com" ws2 "tianjin.com" ws3 "shanghai.com"
OK
127.0.0.1:6379> hscan website 0 match  * count 2
1) "0"
2) 1) "ws1"
   2) "beijing.com"
   3) "ws2"
   4) "tianjin.com"
   5) "ws3"
   6) "shanghai.com"

删除

127.0.0.1:6379> hscan website 0  match *
1) "0"
2) 1) "ws1"
   2) "beijing.com"
   3) "ws2"
   4) "tianjin.com"
   5) "ws3"
   6) "shanghai.com"
127.0.0.1:6379> hdel website ws1
(integer) 1
127.0.0.1:6379> hscan website 0  match *
1) "0"
2) 1) "ws2"
   2) "tianjin.com"
   3) "ws3"
   4) "shanghai.com"
127.0.0.1:6379> 

2.java代码

 3.2.3 List类型删除 

1.使用ltrim渐进式逐步删除,直到全部删除完成。

Lrim命令的作用是: 让列表只保留制定区间内的元素,不在制定区间的内容将被删除。

2.命令演示

27.0.0.1:6379> rpush list  v1 v2 v3 v4 v5
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
127.0.0.1:6379> ltrim list 0 2
OK
127.0.0.1:6379> lrange list 0 -1
1) "v1"
2) "v2"
3) "v3"

127.0.0.1:6379> 

3.java代码

 3.2.4 set类型删除 

1.使用sscan命令获取部分元素,再使用srem命令删除每个元素

2.命令案例

127.0.0.1:6379> sadd  sk1 111  222 333 5 6 8
(integer) 6
127.0.0.1:6379> smembers sk1
1) "5"
2) "6"
3) "8"
4) "111"
5) "222"
6) "333"
127.0.0.1:6379> srem sk1 333
(integer) 1
127.0.0.1:6379> smembers sk1
1) "5"
2) "6"
3) "8"
4) "111"
5) "222"
127.0.0.1:6379> sscan sk1 0 match *
1) "0"
2) 1) "5"
   2) "6"
   3) "8"
   4) "111"
   5) "222"
3.java代码

  3.2.5 zset类型删除 

1.使用zscan每次获取部分元素,再使用zremrangebyrank命令删除每个元素

2.命令代码

127.0.0.1:6379> zadd  ks 20 v1 70 v2 45 v3 50 v4 90 v5
(integer) 5
127.0.0.1:6379> zrange  ks  0 -1  withscores
 1) "v1"
 2) "20"
 3) "v3"
 4) "45"
 5) "v4"
 6) "50"
 7) "v2"
 8) "70"
 9) "v5"
10) "90"
127.0.0.1:6379> zscan ks 0
1) "0"
2)  1) "v1"
    2) "20"
    3) "v3"
    4) "45"
    5) "v4"
    6) "50"
    7) "v2"
    8) "70"
    9) "v5"
   10) "90"
127.0.0.1:6379> zremrangebyrank ks  0 1
(integer) 2
127.0.0.1:6379> zrange  ks  0 -1  withscores
1) "v4"
2) "50"
3) "v2"
4) "70"
5) "v5"
6) "90"

127.0.0.1:6379> 

  3.3 bigkey的优化

1.在配置文件中,修改redis.conf配置文件,修改这几项参数:改为yes。

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

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

相关文章

银河麒麟系统遇到回收站文件无法彻底删除问题及解决办法

【问题描述】 系统版本&#xff1a;银河麒麟 主机型号&#xff1a;长城世恒 用户下载了一个近100G的文件保存在/data路径下&#xff0c;导致磁盘空间100%&#xff0c;删除时未选择彻底删除而是删到回收站&#xff0c;空间未彻底释放&#xff0c;导致回收站里也无法删除掉&…

IDEA社区版启动Application==旗舰版SpringBoot

首先你要确定你的javac版本等同于你的本地的 注意你的Java Compiler 要保证和你的Javac版本一致 注意你的modules 中的resource 和 dependence中的版本一致&#xff0c;还有project 以上内容都是基本内容&#xff0c;一定要确认好 创建Application容器 参考&#xff1a;htt…

山 IT

山是地球上最常见的地貌之一&#xff0c;它们覆盖了其中的大部分表面。山脉和山峰以不同的形状和高度展现出来&#xff0c;给人们提供了壮丽的景观。 山的形成是一个长期的地质过程。前期的火山喷发和地壳运动会导致地面的隆起和抬升&#xff0c;形成高地。随着时间的推移&…

如何再钉钉内跳转自己的网页链接

1.跳转网页转码(工具地址) 原网页:https://www.baidu.com/ 转码后:https%3A%2F%2Fwww.baidu.com%2F 2:地址拼接(官方跳转地址:dingtalk://dingtalkclient/page/link?urlURL&pc_slidetrue) 替换URL: dingtalk://dingtalkclient/page/link?urlhttps%3A%2F%2Fwww.baidu.co…

【C语言】位段详解

前言 上一篇文章&#xff0c;我们学习了结构体的相关知识&#xff0c;今天我们来学习和结构体很像的位段 自定义类型&#xff1a;结构体 位段 位&#xff1a;指的是二进制位 位段的声明 位段与结构体的声明有两个不同&#xff1a; 1.位段的成员必须是 int、unsigned int 或…

实战:JVM调优命令工具

1、查看堆内存每个对象的信息 jmap -histo 12719 输出文件 jmap -histo 12719 > ./log.txt num: 序号 instances: 实例个数 bytes: 占用空间大小 class name: 类名称 2、查看堆内存信息 jmap -heap 12719 Heap Configuration: 分配的内存空间大小 Heap Usage: 使用的堆内存…

第二届人工智能与智能信息处理技术国际学术会议(AIIIP 2023)

第二届人工智能与智能信息处理技术国际学术会议&#xff08;AIIIP 2023&#xff09; 2023 2nd International Conference on Artificial Intelligence and Intelligent Information Processing 第二届人工智能与智能信息处理技术国际学术会议&#xff08;AIIIP 2023&#xf…

新闻稿写作与校对:爱校对如何确保信息准确无误?

新闻产业一直以其快节奏和时效性为标志。每一篇新闻稿件都需要在第一时间发布&#xff0c;但在这种快速的环境下&#xff0c;如何确保内容不仅快速&#xff0c;而且准确呢&#xff1f;这就是“爱校对”发挥作用的地方&#xff0c;它为新闻机构和记者提供了一种简单、高效的方法…

【音视频】语音对讲之 平台到设备

目录 反向语音流程 2.8-》设备&#xff0c;广播​编辑 设备-》2.8 回复 ​编辑 设备-》2.8 invite sdp​编辑 刚才是19008&#xff0c;我这记录的是19004​编辑 续 【音视频】国标双向对讲方案_wvp 对讲_dualven_in_csdn的博客-CSDN博客 反向语音流程 2.8-》设备&#xff0c;…

湘潭大学 湘大 XTU OJ 1215 A+B V 题解(非常详细)

链接 AB V 题面 题目描述 小明很喜欢做ab&#xff0c;他但经常忘记进位&#xff0c;所以他算881290,而不是100。 现在你给了小明一些ab的算式&#xff0c;请问他算出来会是什么&#xff1f; 输入 第一行是一个整数K&#xff0c;表示样例的个数。 每个样例占一行&#xff…

通信原理板块——基础知识(二)

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 在上一章节介绍了信号&#xff0c;…

YOLO目标检测——磁瓦缺陷数据集下载分享

磁瓦是一种常见的建筑材料&#xff0c;用于地板、墙壁等表面装饰&#xff0c;磁瓦缺陷数据集是用于研究和分析磁瓦缺陷检测问题的数据集。 数据集点击下载&#xff1a;YOLO磁瓦缺陷数据集2700图片6类别.rar

FastReport 群组未连接至数据库

当FastReport 出现群组未连接至数据库 的报错时&#xff0c;可能是GroupHeader的位置不对&#xff0c;如下图&#xff0c;往上拖一下即可。 然后就可以打印出分组的样式了&#xff1a;

怎样理解三次握手和四次挥手?

1. 三次握手 三次握手的大致流程图如下所示 &#xff08;1&#xff09;当客户端想与服务端建立连接时&#xff0c;客户端会先发送连接请求到服务端&#xff0c;该请求需要服务器接收并确认&#xff0c;这是一次握手&#xff1b; &#xff08;2&#xff09;当服务端收到了客户…

太残忍了,程序员造囚禁被拔牙,全身损伤 88%

周末的时候&#xff0c;看到一条值得大家警惕和警醒的新闻。 据九派新闻报道&#xff0c;中国一男子因未编写出赌博游戏程序&#xff0c;在越南遭到数月的囚禁、虐待。报道称&#xff0c;46 岁的受害人房立敬是一名程序员&#xff0c;由于在中国做生意遇到困难&#xff0c;于 2…

RFID工业识别技术在智能仓储管理中的创新实践

随着信息技术的飞速发展&#xff0c;智能仓储管理已然成为现代物流行业的核心趋势。在这一变革的背景下&#xff0c;RFID工业识别技术崭露头角&#xff0c;为仓储管理注入了创新动力。本文将深入探讨RFID在智能仓库自动化、盘点与分拣中的应用&#xff0c;以及如何解决传统仓储…

你知道fastjson的反序列化漏洞吗?

面试回答 当我们使用 fastjson 进行序列化的时候&#xff0c;当一个类中包含了一个接口&#xff08;或抽象类&#xff09;的时候&#xff0c;会将子类型抹去&#xff0c;只保留&#xff08;抽象类&#xff09;的类型&#xff0c;使得反序列化时无法拿到原始类型。 那么为了解决…

Redis 5环境搭建

一、环境搭建 如果是Centos8&#xff0c;yum 仓库中默认的 Redis版本就是5&#xff0c;直接yum install即可。如果是Centos7&#xff0c;yum 仓库中默认的 Redis版本是3系列&#xff0c;比较老~ 为了我们能在 Centos7中下载到 Redis5 首先要安装额外的软件源 sudo yum insta…

5G与4G的RRC协议之异同

什么是无线资源控制&#xff08;RRC&#xff09;&#xff1f; 我们知道&#xff0c;在移动通信中&#xff0c;无线资源管理是非常重要的一个环节&#xff0c;首先介绍一下什么是无线资源控制&#xff08;RRC&#xff09;。 手机和网络通过无线信道相互通信&#xff0c;彼此交…

战略是设计和孕育出来的?跟孙子兵法很类似

战略设计派&#xff1a;战略是设计和孕育出来的【安志强趣讲264期】 设计派起源于西方1957年 很类似《孙子兵法》的观点 趣讲大白话&#xff1a;战略是谋划出来的 **************************** 设计派是战略管理最先出现的流派 到现在还有影响力 非常有名的SWOT是标志 SWOT现在…