简述几个我们对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的几个命令,谢谢大家!

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

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

相关文章

STM32定时器输入捕获测量高电平时间

STM32定时器输入捕获测量高电平时间 输入捕获测量高电平时间CuebMX配置代码部分 本篇内容要求读者对STM32通用定时器有一点理解,如有不解,请看 夜深人静学32系列15——通用定时器 输入捕获 输入捕获是STM32通用定时器的一种功能,可以捕获特定…

axios 请求合集

post 请求 请求负载请求参数(Request Payload) import axios from axios import qs from query-stringexport function getRoles(data){return axios.post(目标地址,data,{headers:{Content-Type: application/json,},}) }表单请求参数(Form…

OGG-01224 Address already in use 问题

ERROR OGG-01224 Oracle GoldenGate Manager for Oracle, mgr.prm: Address already in use. ERROR OGG-01668 Oracle GoldenGate Manager for Oracle, mgr.prm: PROCESS ABENDING. 查看端口被占用情况: [rootcenterone ogg]# lsof -i:7809原因mgr 7809 端口被占…

Spring-IOC-@Value和@PropertySource用法

1、Book.java PropertySource(value"classpath:配置文件地址") 替代 <context:property-placeholder location"配置文件地址"/> Value("${book.bid}") Value("${book.bname}") Value("${book.price}") <bean id&…

MS90C386:+3.3V 175MHz 的 24bit 平板显示器(FPD)LVDS 信号接收器

产品简述 MS90C386 芯片能够将 4 通道的低压差分信号&#xff08; LVDS &#xff09;转换成 28bit 的 TTL 数据。时钟通道与数据通道并行输入。在时钟频率 为 175MHz 时&#xff0c; 24bit 的 RGB 数据、 3bit 的 LCD 时序数据和 1bit 的控制数据以 1225Mb…

Es 拼音搜索无法高亮

目录 背景&#xff1a; Es 版本&#xff1a; 第一步 第二步 &#xff08;错误步骤 - 只是记录过程&#xff09; 第三步 第四步 第五步 第六步 第七步 背景&#xff1a; app 原有的搜索功能无法进行拼音搜索&#xff0c;产品希望可以支持&#xff0c;例如内容中含有&a…

c++|内联函数

一、概念 以inline修饰的函数叫做内联函数&#xff0c;编译时c编译器会在调用函数的地方展开&#xff0c;而不会建立栈帧&#xff0c;提升了程序运行的效率 例子&#xff1a; #include <iostream> using namespace std;int Add(int left, int right) {return left - ri…

配置环境-insightface-torch

1. 创建环境&#xff1a;conda create -n insightface2 python3.8 2.安装pytorch: 我的cuda 是 11.3 然后进入 pytorch 官网查找对应cuda 版本 pytorch 安装 建议使用 pip # CUDA 11.3 conda install pytorch1.12.1 torchvision0.13.1 torchaudio0.12.1 cudatoolkit11.3 -…

Spring5从入门到精通(一)

1.IOC容器 2.AOP面向切面编程 3. 声明事务&#xff1b; 4. 注解的方式启动对我们后期学习SpringBoot有非常大帮助&#xff1b; 5. 整合SpringMVC 和Mybatis&#xff1b; 6. Spring5新特性&#xff1b; JDK最低版本要求1.8 Spring概念 Spring是一个JavaEE开源的轻量级别…

勒索病毒最新变种.mkp勒索病毒来袭,如何恢复受感染的数据?

引言&#xff1a; 随着网络技术的不断发展&#xff0c;勒索病毒已经成为数字时代的威胁之一&#xff0c;而MKP勒索病毒正是其中之一。本文将深入介绍MKP勒索病毒的特点&#xff0c;讨论恢复被加密数据的方法&#xff0c;并提供预防措施&#xff0c;以帮助用户和组织更好地保护…

openGauss学习笔记-127 openGauss 数据库管理-设置账本数据库-修复账本数据库

文章目录 openGauss学习笔记-127 openGauss 数据库管理-设置账本数据库-修复账本数据库127.1 前提条件127.2 背景信息127.3 操作步骤 openGauss学习笔记-127 openGauss 数据库管理-设置账本数据库-修复账本数据库 127.1 前提条件 系统中需要有审计管理员或者具有审计管理员权…

Leetcode_48:旋转图像

题目描述&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],…

连接数据库

在xml里 "jdbc:mysql://localhost:3306/db_xiaoqi?characterEncodingutf8&amp;useSSLfalse&amp;serverTimezoneUTC&amp;rewriteBatchedStatementstrue".properties配置文件 drivercom.mysql.cj.jdbc.Driver urljdbc:mysql://localhost:3306/mybatis_s…

Android okhttp3.0配置https信任所有证书

参考: Android okhttp3.0配置https的自签证书和信任所有证书 private OkHttpClient getHttpsClient() {OkHttpClient.Builder okhttpClient new OkHttpClient().newBuilder();//信任所有服务器地址okhttpClient.hostnameVerifier(new HostnameVerifier() {Overridepublic boo…

夯实数字基础设施,促进可持续发展

梁华可持续论坛开幕致辞 &#xff08;2023年11月21日&#xff0c;东莞&#xff09; 各位嘉宾&#xff0c;女士们&#xff0c;先生们&#xff0c;大家好&#xff01;欢迎出席今年的可持续发展论坛&#xff0c;共同探讨数字经济时代&#xff0c;数字基础设施建设如何更好使能可…

【Java】NIO概述

本文主要介绍Java的IO。 这里主要按类的操作方式和操作对象对JavaIO进行分类&#xff0c;方便理解&#xff0c;后续使用时可以方便地查询。 一、操作方式分类 首先介绍几组概念&#xff1a; 字节流和字符流&#xff1a; 字节流&#xff1a;以字节为单位&#xff0c;每次次读…

(二)pytest自动化测试框架之添加测试用例步骤(@allure.step())

前言 在编写自动化测试用例的时候经常会遇到需要编写流程性测试用例的场景&#xff0c;一般流程性的测试用例的测试步骤比较多&#xff0c;我们在测试用例中添加详细的步骤会提高测试用例的可阅读性。 allure提供的装饰器allure.step()是allure测试报告框架非常有用的功能&am…

Linux学习第44天:Linux 多点电容触摸屏实验:难忘记第一次牵你手的温存

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本章的思维导图内容如下&#xff1a; 二、硬件原理图分析 三、实验程序编写 1、修改设备树 1&#xff09;、添加FT5426所使用的IO 一个复位 IO、一个中断 IO、…

SpringBoot整合MybatisPlus

1. 首先引入maven依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.28</version><scope>provided</scope> </dependency><dependency><groupId>…

Python的安装及其python程序生成exe可执行程序

Python是一种高级编程语言&#xff0c;由Guido van Rossum在1989年12月首次发布。它具有简单易学、易读、易写的语法和强大的动态类型和垃圾回收机制。Python解释器是自由且开放源代码的软件&#xff0c;可以在各种操作系统&#xff08;如Linux、Windows、macOS等&#xff09;上…