简述几个我们对Redis 7开源社区所做的贡献
Redis 7 已经于2022年4月28号正式发布,其中包括了将近50个新的命令,增加了许多新的特性,并且在整个Redis 6到Redis 7的开发过程中,我也对Redis 的开源社区贡献了一些微薄的力量。在这篇文章中,我来给大家介绍几个自己亲身参与的几个Redis 7 功能,并希望能够为Redis 8做出更多的贡献。
在这篇文章中,我将介绍以下的内容:
1. 在redis.conf 配置文件中新增加的参数:cluster-port
2. 在sentinel.conf配置文件中新增加的参数:master-reboot-down-after-period
3. 在sentinel中新增加的命令:sentinel debug
4. 在集群中新增加的命令:cluster addslotsrange 和cluster delslotsrange
5. 对info命令的增强
6. 修复sentinel更新密码的一个隐患
7. 增加了client list 命令的显示内容
在redis.conf配置文件中增加了一个新的参数cluster-port 用于为处于集群模式下的节点使用
我们知道,当一个节点处于集群模式中,它至少需要有2个TCP连接端口,一个负责与客户端进行连接,我们通常叫做命令端口,例如6379;而另外一个TCP的连接端口,我们可以叫集群端口,是负责当前节点与集群中其他节点进行故障检测,配置更新等其他功能,这个端口的数值在Redis 7之前都是命令端口+10000. 这种设置方式就完全限制的客户端对集群端口的配置,如果当前节点的这个端口值被其他服务所占用,那么当前节点就会启动失败。
在Redis 7中,我们增加了cluster-port这个参数,可以允许客户自己定义集群端口,给了客户更大的自由度,使用格式是cluster-port 0。
如果客户在配置文件中将这个端口设置为0,那么当前节点的集群端口依然等于命令端口+10000;如果客户将这个端口设置为大于0,那么当前节点在启动时将会将集群端口设置为它的值。
在sentinel.conf配置文件中新增加了一个参数:master-reboot-down-after-period
它的正确使用格式是:SENTINEL master-reboot-down-after-period mymaster 0
下面来阐述一下增加这个参数的原因:
在增加这个参数之前,Sentinel节点是通过在sentinel.conf设置的down-after-milliseconds参数来向主节点,备节点和其他sentinel节点发送PING请求来确认发送的目的节点是否正常工作。在sentinel.conf或者用户自定义的sentinel配置文件中,如果down-after-milliseconds的设置大于或者等于1000,那么sentinel发送频率是1秒,如果down-after-milliseconds的设置小于1000,那么sentinel节点发送PING请求的频率是down-after-milliseconds值(毫秒数)。
但是当主节点在非常短的时间内发生了重启,例如0.01秒,那么sentinel节点会收到一个”reboot”信号。在引入参数Master-reboot-down-after-period之前,sentinel是不会发生主备切换的,那么如果主节点有很大的数据要从RDB文件中读取到内存中,这个时候主节点是处于LOADING状态,是不能接受外部数据响应的,会导致客户端认为主节点unavailable.
在Redis 7中,如果用户在sentinel的配置文件中将master-reboot-down-after-period设置为大于0的数,那么当sentinel检测到第一次收到的“reboot”的时间与当前时间间隔大于master-reboot-down-after-period的毫秒数,并且主节点依然处于LOADING状态,那么sentinel将开始进入主备切换状态。这样就大大地降低了数据丢失和主节点处于Unavailable 的可能性。
在sentinel中新增加的命令:sentinel debug
为了方便Redis的开发人员对sentinel的部分参数进行调试或者在写测试用例的时候更改一些参数,在Redis 7的Sentinel的模式中,增加了一个新的命令:sentinel debug
当用户在客户端只运行sentinel debug命令时候,它会显示当前状态下,在Redis的sentinel部分可以调试的13个参数的具体信息,例子如下:
127.0.0.1:26379> sentinel debug1) "INFO-PERIOD"2) "10000"3) "PING-PERIOD"4) "1000"5) "ASK-PERIOD"6) "1000"7) "PUBLISH-PERIOD"8) "2000"9) "DEFAULT-DOWN-AFTER"
10) "30000"
11) "DEFAULT-FAILOVER-TIMEOUT"
12) "180000"
13) "TILT-TRIGGER"
14) "2000"
15) "TILT-PERIOD"
16) "30000"
17) "SLAVE-RECONF-TIMEOUT"
18) "10000"
19) "MIN-LINK-RECONNECT-PERIOD"
20) "15000"
21) "ELECTION-TIMEOUT"
22) "10000"
23) "SCRIPT-MAX-RUNTIME"
24) "60000"
25) "SCRIPT-RETRY-DELAY"
26) "30000"
当用户想要更改一个或者多个参数的时候,可以运行如下命令:
Sentinel debug parameter value [parameter value…]
正像上面的例子中信息一样,通过这个命令,用户可以更改下面13个参数的信息:
SENTINEL_INFO_PERIOD
SENTINEL_PING_PERIOD
SENTINEL_ASK_PERIOD
SENTINEL_PUBLISH_PERIOD
SENTINEL_DEFAULT_DOWN_AFTER
SENTINEL_TILT_TRIGGER
SENTINEL_TILT_PERIOD
SENTINEL_SLAVE_RECONF_TIMEOUT
SENTINEL_MIN_LINK_RECONNECT_PERIOD
SENTINEL_ELECTION_TIMEOUT
SENTINEL_SCRIPT_MAX_RUNTIME
SENTINEL_SCRIPT_RETRY_DELAY
SENTINEL_DEFAULT_FAILOVER_TIMEOUT
新增cluster addslotsrange 命令和cluster delslotsrange 命令
在Redis 7 之前,如果用户想为集群(cluster) 中的一个节点增加一些槽或者从一个节点中删除一些槽,那么唯一的选择就是cluster addslots slot [slot…] 或者cluster delslots slot [slot…]。这两个命令的缺点在于如果用户想要一次性操作大量连续的槽,那么需要输入大量的参数。例如下面的例子,如果想要把1到5000 的槽值赋予一个节点,那么用户需要运行如下的命令:
Cluster addslots 1 2 3 …… 4999 5000
在cluster addslots之后需要传递5000个参数
那么在新增的cluster addslotsrange命令中,用户只需要传递2个参数:开始的槽值和结束的槽值,例子如下:
cluster addslotsrange 1 5000.
同理,cluster delslotsrange命令也是对已有的cluster delslots进行了增强,当用户想要删除大量的连续槽值的时候,也只需要传递2个参数即可
这两个新命令的具体格式如下:
CLUSTER DELSLOTSRANGE startslot endslot [startslot endslot...]
CLUSTER ADDSLOTSRANGE startslot endslot [startslot endslot...]
更加具体的使用和注意事项,可以参考redis的链接:
https://redis.io/commands/cluster-addslotsrange/
https://redis.io/commands/cluster-delslotsrange/
对Info命令的增强
在客户端中执行info命令,在Redis 7中,info命令可以接受多于一个section的参数,例如
INFO Server Replication
INFO CPU Memory
INFO default commandstats all
具体关于info命令的使用,可以参考链接:https://redis.io/commands/info/
修复sentinel更新密码的一个隐患
增加了当用户在Sentinel的客户端使用sentinel set mastername auth-pass newpassword 命令时的安全性
在Redis 7.0 之前的版本中,如果用户在Sentinel的客户端执行如下命令时:
127.0.0.1:17379> sentinel set mymaster auth-pass THIS_IS_PASSWORD
OK
在sentinel的服务器端,用户会看到一个log:
22720:X 05 Oct 2021 12:43:16.248 # +set master mymaster 127.0.0.1 6379 auth-pass THIS_IS_PASSWORD
我们可以看到,新设置的密码被打印到客户端或者可以被直接存储到日志文件中,这个非常不安全的。在Redis 7中,这个问题被修复了。如果客户执行同样的命令,那么客户会看到类似下面的日志:
22720:X 05 Oct 2021 12:43:16.248 # +set master mymaster 127.0.0.1 6379 auth-pass ******
增加了client list命令的显示内容
用户可以通过client list命令查看当前的Redis支持的RESP协议的版本
RESP全称是Redis serialization protocol. 客户端可以通过RESP协议与Redis 服务器进行沟通。在最新的Redis 7版本中,客户端可以通过调用client list这个命令查看当前支持的RESP协议的版本,具体的例子如下:
127.0.0.1:6379> client list
id=3 addr=127.0.0.1:48556 laddr=127.0.0.1:6379 fd=8 name= age=153 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=20448 argv-mem=10 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=22298 events=r cmd=client|list user=default redir=-1 resp=2
这篇文章就介绍到这里了,下一篇文章会介绍Redis 7新增的functions的几个命令,谢谢大家!
相关文章:
简述几个我们对Redis 7开源社区所做的贡献
Redis 7 已经于2022年4月28号正式发布,其中包括了将近50个新的命令,增加了许多新的特性,并且在整个Redis 6到Redis 7的开发过程中,我也对Redis 的开源社区贡献了一些微薄的力量。在这篇文章中,我来给大家介绍几个自己亲…...
产品卖点怎么写,如何打造卖点?
...
跟李沐学AI-深度学习课程00-03【预告、课程安排、深度学习介绍、安装】
目录 00 预告 01 课程安排 02 深度学习介绍 03 安装 本地安装 04 数据操作数据预处理 数据操作 数据类型 创建数组 访问元素 数据操作实现 入门 运算符 广播机制 索引和切片 节省内存 转换为其他Python对象 数据预处理实现 读取数据集 处理缺失值 转换为张…...
C++ this 指针 面试
this 指针 this 指针是一个隐含于每一个非静态成员函数中的特殊指针。它指向调用该成员函数的那个对象。 当对一个对象调用成员函数时,编译程序先将对象的地址赋给 this 指针,然后调用成员函数,每次成员函数存取数据成员时,都隐…...
虚拟机上安装docker,并安装flink镜像
1. 安装docker 官网步骤:https://docs.docker.com/engine/install/centos/ sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.…...
【计算机网络】P1 计算机网络概述
P1 计算机网络概述 概念组成角度1:组成部分角度2:工作方式角度3:功能组成 功能分类按分布范围分按使用者分按交换技术按拓扑结构分按传输技术分 标准化工作及相关组织标准化工作相关组织 概念 三网融合 通过 计算机网络,将 电信网…...
003 OpenCV filter2D
目录 一、环境 二、图像卷积 三、代码演示 3.1、锐化 3.2、sobel边缘,x方向 3.3、sobel边缘,y方向 3.4、高斯模糊 3.5、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、图像卷积 在OpenCV…...
轻松玩转华为MateX5分屏功能,乐趣层出不穷!
✅小窗交互,沉浸体验不打断; ✅分区截屏,花式截图,一招搞定; ✅跨屏拖拽,随心分享易如反掌; ✅悬停视频会议,沟通效率大不同。...
springboot引入redisson分布式锁及原理
1.引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.6</version> </dependency>2.配置类创建bean /*** author qujingye* Classname RedissonConfig* Description TOD…...
Linux驱动开发 问题随笔
1、内核空间与用户空间数据交换方式 分两种情况: 1> 需要交换的数据量较大时; 2> 需要交换的数据量较小时; 第一种情况使用以下的函数: unsigned long copy_to_user(void __user* to, const void* from, unsigned long n)…...
三分/01分数规划
三分 最小球覆盖 2018南京D 三分套三分套三分 constexpr int N105; struct node{int x,y,z; }a[N]; int n; double road(double x1,double y1,double z1,double x2,double y2,double z2){return sqrt((x1-x2)*(x1-x2)(y1-y2)*(y1-y2)(z1-z2)*(z1-z2)); } double check(double…...
大批卖家产品被下架!Temu又有新动作?
大批卖家产品被下架!Temu又有新动作? 近日,Temu正式上线韩国站,截止目前已上线27个国家地区。Temu海外市场发展迅猛,外界的声音也褒贬不一。这其中最有发言权的,应该就是Temu平台的卖家了! …...
STM32 LL库 TIM3定时器多通道捕获输入采集
为什么不用HAL库,使用HAL库捕获输入一个通道还尚可,多通道捕获由于HAL的回调函数不符合我的要求,干脆直接切换到LL库。网上找了许多,代码处理写的不符合我的要求,这里记录一下我的调试过程。 TIM2输出1路PWM信号&#…...
如何为初创企业选择合适的 ERP 系统?
**ERP系统**是制造、分销、供应链、金融、会计、风险管理等多个行业必不可少的企业技术解决方案。不论垂直行业、企业规模或目标受众如何,将ERP作为企业管理战略的核心部分都非常重要。 对于渴望发展的小型企业和初创企业来说,更是如此。大型企业需要对…...
jssip contact的随机字符串的问题
let configuration {sockets: [socket],uri: sip:1001127.0.0.1,}; 如果这样注册freesswitch,那么fs注册信息中的Contact字段信息就是:sip:sdfsdfsdfsfcvdwvdwd.invalid;transportws;fs_natyes;fs_path... 正确的写法是: //URI是jssip内置…...
别再吐槽大学教材了,来看看这些网友强推的数学神作!
前言 关于大学数学教材的吐槽似乎从来没停止过。有人慨叹:数学教材晦涩难懂。错!难懂,起码还可以读懂。数学教材你根本读不懂;也有人说:数学教材简直就是天书。 数学教材有好有坏,这话不假,但更…...
Elasticsearch-汇总
Elasticsearch-基础介绍 跳转 分布式全文搜索引擎:包含【实时搜索】和【分析引擎】 Elasticsearch-倒排索引 跳转 倒排索引 跳转 Elasticsearch-Term Dictionary和Term Index 跳转 lucene-基础介绍 跳转 Elasticsearch-联合索引 跳转 Elasticsearch-Roaring B…...
9.3 【MySQL】系统表空间
了解完了独立表空间的基本结构,系统表空间的结构也就好理解多了,系统表空间的结构和独立表空间基本类似,只不过由于整个MySQL进程只有一个系统表空间,在系统表空间中会额外记录一些有关整个系统信息的页面,所以会比独立…...
STM32CUBEIDE生成hex文件 Release版本的下载不启动
现象描述: 使用STM32CUBEIDE生成hex文件,使用脱机下载器或者J-Flash下载到单片机中(STM32F407)单片机不启动。 测试其他的程序是可以启动的。 修改办法: 把Release版本切换到debug版本,重新编写…...
2023年亚太杯数学建模思路 - 复盘:校园消费行为分析
文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
Element-Plus:popconfirm与tooltip一起使用不生效?
你们好,我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip,产品要求是两个需要结合一起使用,也就是鼠标悬浮上去有提示文字,并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...
