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。

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

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

相关文章

网络安全(大厂)面试题

以下为网络安全各个方向涉及的面试题&#xff0c;星数越多代表问题出现的几率越大&#xff0c;祝各位都能找到满意的工作。 注&#xff1a;本套面试题&#xff0c;已整理成pdf文档&#xff0c;但内容还在持续更新中&#xff0c;因为无论如何都不可能覆盖所有的面试问题&#xf…

【了解一下常见的设计模式】

文章目录 了解一下常用的设计模式(工厂、包装、关系)导语设计模式辨析系列 工厂篇工厂什么是工厂简单工厂「模式」&#xff08;Simple Factory「Pattern」&#xff09;简单工厂代码示例&#xff1a;简单计算器优点&#xff1a;缺点&#xff1a; 静态工厂模式特点&#xff1a; 工…

Python(八十六)字符串的编码与解码

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

Apache BeanUtils工具介绍

beanutils&#xff0c;顾名思义&#xff0c;是java bean的一个工具类&#xff0c;可以帮助我们方便的读取(get)和设置(set)bean属性值、动态定义和访问bean属性&#xff1b;细心的话&#xff0c;会发现其实JDK已经提供了一个java.beans包&#xff0c;同样可以实现以上功能&…

tomcat8的安装和部署启动jpress应用

首先准备tomcat&#xff0c;jdk&#xff0c;jpress安装包 一. tomcat8的安装 1. 使用xftp等工具将软件包上传至Linux 2. 将jdk移至/usr/local/tomcat并安装jdk mv jdk-8u261-linux-x64.rpm /usr/local/tomcat yum localinstall jdk-8u261-linux-x64.rpm -y 3. 将tomca…

React+Typescript 状态管理

好 本文 我们来说说状态管理 也就是我们的 state 我们直接顺便写一个组件 参考代码如下 import * as React from "react";interface IProps {title: string,age: number }interface IState {count:number }export default class hello extends React.Component<I…

基于空间的图卷积神经网络:GNN

目录 欧氏空间中神经网络发挥巨大最作用&#xff0c;DNA&#xff0c;知识图谱三维或者多维空间不行 邻接矩阵实现图结构的矩阵化表示&#xff1a;造梦师 局和操作实现层内消息传递&#xff1a;带线的连接机传递消息 GCN通过邻域聚合实现特征提取 SVM支持向量机 ​编辑 硬分…

8.23 类 构造函数 析构函数 拷贝构造函数

#include <iostream>using namespace std;class Per{string name;int age;float *high;float *weight; public:Per(string name,int age,float high,float weight):name(name),age(age),high(new float(high)),weight(new float(weight)){cout << "Per的构造函…

司徒理财:8.23晚间黄金多空走势分析及操作策略

黄金走势分析&#xff1a;      黄金下跌遇阻&#xff0c;短线开启震荡调整走势&#xff0c;但跌势依旧没有改变&#xff0c;没有突破1906压力前&#xff0c;还是偏空走势&#xff0c;反弹继续干空。趋势行情&#xff0c;不要轻言翻转&#xff01;即便下跌结束&#xff0c;…

Git企业开发控制理论和实操-从入门到深入(一)|为什么需要Git|Git的安装

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/cate…

如何使用 Docker Compose 运行 OSS Wordle 克隆

了解如何使用 Docker Compose 在五分钟内运行您自己的流行 Wordle 克隆实例。您将如何部署 Wordle&#xff1f; Wordle在 2021 年底发布后席卷了互联网。对于许多人来说&#xff0c;这仍然是一种早晨的仪式&#xff0c;与一杯咖啡和一天的开始完美搭配。作为一名 DevOps 工程师…

基于swing的小区物业管理系统java jsp社区报修信息mysql源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于swing的小区物业管理系统 系统有1权限&#xff1…

docker搭建redis三主三从集群,及其常见问题解决

目录结构 redis.conf主要参数 每个配置文件都要修改对应的端口 bind 0.0.0.0 protected-mode no #每个配置文件都要修改端口 port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 supervised no loglevel notice #日志文件路径 #logfile "/mydata/master_redis/log/…

【数据结构OJ题】环形链表

原题链接&#xff1a;https://leetcode.cn/problems/linked-list-cycle/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 整体思路&#xff1a;定义快慢指针fast&#xff0c;slow&#xff0c;如果链表确实有环&#xff0c;fast指针一定会…

matlab使用教程(21)—求函数最值

1. 求函数最优值 1.1求一元函数的最小值 如果给定了一个一元数学函数&#xff0c;可以使用 fminbnd 函数求该函数在给定区间中的局部最小值。例如&#xff0c;请考虑 MATLAB 提供的 humps.m 函数。下图显示了 humps 的图。 x -1:.01:2; y humps(x); plot(x,y) xlabel(x)…

关于ios Universal Links apple-app-site-association文件 Not Found的问题

1. 背景说明 1.1 Universal Links 是什么 Support Universal Links 里面有说到 Universal Links 是什么、注意点、以及如何配置的。简单来说就是 当您支持通用链接时&#xff0c;iOS 用户可以点击指向您网站的链接&#xff0c;并无缝重定向到您安装的应用程序 大白话就是说&am…

oracle警告日志\跟踪日志磁盘空间清理

oracle警告日志\跟踪日志磁盘空间清理 问题现象&#xff1a; 通过查看排查到alert和tarce占用大量磁盘空间 警告日志 /u01/app/oracle/diag/rdbms/orcl/orcl/alert 跟踪日志 /u01/app/oracle/diag/rdbms/orcl/orcl/trace 解决方案&#xff1a; 用adrci清除日志 确定目…

如何评价国内的低代码开发平台(apaas)?

什么是低代码&#xff1f;低代码平台有什么价值&#xff1f;低代码开发到底能适应多广泛场景&#xff1f;低代码到底能做出多么复杂的应用&#xff1f;低代码平台应该如何筛选&#xff1f; 在低代码重新火爆的今天&#xff0c;我们又该如何利用低代码&#xff1f; 01 什么是a…

Java学习笔记38

Java笔记38 注解 什么是注解 Annotation是从 JDK 5.0 开始引入的新技术。Annotation的作用︰ 不是程序本身&#xff0c;可以对程序作出解释。&#xff08;这一点和注释 - comment没什么区别&#xff09;可以被其他程序&#xff08;比如编译器等&#xff09;读取。 Annotatio…

多个微信号怎么快速发圈、自动加好友、自动回复?

一键助你快速发圈、批量自动加好友、自动回复&#xff0c;好用哭了&#xff01; 微信管理系统是一个聚合管理多个微信账号的利器&#xff0c;让你的微信管理变得简单高效。不管你是电商、微商&#xff0c;还是拥有多个微信号的用户&#xff0c;这一款微信管理软件都可以满足你的…