redis7高级篇2 redis的BigKey的处理
一 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。
相关文章:

redis7高级篇2 redis的BigKey的处理
一 Bigkey的处理 1.1 模拟造数 1.截图 2.代码 :使用pipe 批量插入10w的数据量 cat /root/export/monidata.txt | redis-cli -h 127.0.0.1 -a 123456 -p 6379 --pipe [rootlocalhost export]# for((i1;i<10*10;i)); do echo "set k$i v$i" >>…...

启英泰伦通话降噪方案,采用深度学习降噪算法,让通话更清晰
生活中的通话应用场景无处不在,如电话、对讲机、远程会议、在线教育等。普遍存在的问题是环境噪音、干扰声导致通话声音不清晰,语音失真等。 为了解决这一问题,启英泰伦基于自适应线性滤波联合非线性滤波的回声消除方案和基于深度学习的降噪…...
将SonarLint集成到Git
1、搭建SonarQube服务器 下载SonarQube安装包 访问SonarQube官网(https://www.sonarqube.org/downloads/)下载最新版本的SonarQube Community Edition。解压安装包 将下载的压缩包解压到一个目录,例如:D:\sonarqube-community-7.…...

【Jenkins】rpm方式安装Jenkins(2.401,jdk版本17)
目录 【Jenkins】rpm方式安装Jenkins 1、主机初始化 2、软件要求 RPM包安装的内容 配置文件说明 3、web操作 【Jenkins】rpm方式安装Jenkins 1、主机初始化 [rootlocalhost ~]# hostname jenkins[rootlocalhost ~]# bash[rootjenkins ~]# systemctl stop firewalld[roo…...
vue3跳转统一页面,path一样,传递的参数不一样时页面不刷新
vue3中当路由一样,参数quary不一样的跳转不刷新 当路由的path都是一样的,quary不一样,在跳转的时候,不会执行onMounted等方法,页面也就不会刷新。 方法: 修改router-view,在app.vue页面给标签…...

升级还是不升级?iPhone 15和iPhone 14 Plus性能比较
预览iPhone 15 Pro Max与三星Galaxy S23 Ultra之战是有正当理由的。显然,三星的旗舰智能手机为2023年的所有其他旗舰产品定下了基调——由于其超长的电池寿命和一流的摄像头,证明了它是最受欢迎的产品。 毫不奇怪,Galaxy S23 Ultra不仅是最好的照相手机之一,也是花钱能买到…...

关于LED电子显示屏幕的显示功能
因为LED显示屏的发光颜色和发光效率与制作LED的材料和工艺相关,目前广泛采用的有红、绿、蓝三种颜色的LED。这些LED的独特之处在于它们工作时需要的电压极低(仅1.5-3V),能够主动发光,并且具有一定的亮度。这亮度可以通…...

计算机视觉--利用HSV和YIQ颜色空间处理图像噪声
前言: Hello大家好,我是Dream。 今天我们将利用HSV和YIQ颜色空间处理图像噪声。在本次实验中,我们使用任意一张图片,通过RGB转HSV和YIQ的操作,加入了椒盐噪声并将其转换回RGB格式,最终实现对图像的噪声处理…...

Android Studio中引入MagicIndicator
1.github中下载文件 GitHub - hackware1993/MagicIndicator: A powerful, customizable and extensible ViewPager indicator framework. As the best alternative of ViewPagerIndicator, TabLayout and PagerSlidingTabStrip —— 强大、可定制、易扩展的 ViewPager 指示器框…...

webrtc学习(六)重要信令级时序图
一.四个重要信令 1.用户登录信令 SignIn 2..用户登出信令 SignOut 3..用户等待信令 wait信令是指从服务器的消息队列中获取暂存的中转消息,比如说sdp消息,对于信令服务器来说,他没有办法给用户推送消息,只能是用户推送消息给…...

Leetcode刷题笔记--Hot21-30
1--全排列(46) 主要思路1: 经典全排列,每次枚举每一位时,重头开始枚举,用一个访问数组记录当前已经被访问过的数字; 这道题不包含重复数字,所以不需要进行树层上的剪枝; …...
【MyBatis八股】MyBatis面试题
目录 MyBatis是什么?Mybaits的优缺点?为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?Hibernate 和 MyBatis 的区别?JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?MyBatis…...

Apache Hudi初探(二)(与flink的结合)--flink写hudi的操作(JobManager端的提交操作)
背景 在Apache Hudi初探(一)(与flink的结合)中,我们提到了Pipelines.hoodieStreamWrite 写hudi文件,这个操作真正写hudi是在Pipelines.hoodieStreamWrite方法下的transform(opName("stream_write", conf), TypeInformation.of(Object.class), operatorFa…...

Office ---- excel ---- 怎么批量设置行高
解决方法: 调整行高即可...

Wlan——STA上线流程与802.11MAC帧讲解
目录 802.11MAC帧基本概念 802.11帧结构 802.11MAC帧的分类 管理帧 控制帧 数据帧 STA接入无线网络流程 信号扫描—管理帧 链路认证—管理帧 用户关联—管理帧 用户上线 802.11MAC帧基本概念 802.11协议在802家族中的角色位置 其中802.3标准属于以太网的一种帧格式…...
HTTP的并发连接限制和连接线程池
为什么有并发连接限制和连接线程池 大量的客户端连接到服务器,会导致服务器端需要大量的维护连接资源,同时需要处理客户端的请求,这是如何高效的执行任务成了一个关键的问题,所以,并发连接限制和连接线程池的出现就是…...
【从零学习python 】45.Python中的类方法和静态方法
文章目录 类方法、静态方法类方法静态方法使用场景 进阶案例 类方法、静态方法 类方法 类方法是以类对象作为第一个参数的方法。需要使用装饰器classmethod来标识其为类方法。对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数。 class Dog…...
基于 VisualFoxPro 环境开发应用程序的过程
应用程序开发前开发者要与用户之间广泛沟通,作大量的调查研究和分析工 作,从而明确用户的要求、程序应具备的功能及可以完成的任务。为此要进行两方 面的分析,数据分析和功能分析。数据分析的目的是收集系统应包含的数据、数据 的真实性、…...

SpringBoot整合Quartz,实现数据库方式执行定时任务
springboot整合quartz,实现数据库方式执行定时任务。把定时任务信息存进数据库,项目启动后自动执行定时任务。 1.引入依赖包: <dependency> <groupId>org.springframework.boot</groupId> <ar…...
java中多个list怎么用List表示?
如果你有多个List对象,想要将它们合并成一个List对象,可以使用addAll()方法来实现。addAll()方法将会把一个List中的元素逐个添加到另一个List中。 以下是一个示例,展示了如何将多个List对象合并为一个List对象: import java.ut…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...

react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)
之前都是使用react-pdf来渲染pdf文件,这次有个需求是要兼容xp环境,xp上chrome最高支持到49,虽然说iframe或者embed都可以实现预览pdf,但为了后续的定制化需求,还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…...

深入理解 C++ 左值右值、std::move 与函数重载中的参数传递
在 C 编程中,左值和右值的概念以及std::move的使用,常常让开发者感到困惑。特别是在函数重载场景下,如何合理利用这些特性来优化代码性能、确保语义正确,更是一个值得深入探讨的话题。 在开始之前,先提出几个问题&…...