首页 > 数据库 >简述几个我们对Redis 7开源社区所做的贡献

简述几个我们对Redis 7开源社区所做的贡献

时间:2023-11-16 17:33:48浏览次数:38  
标签:命令 端口 Redis 简述 cluster 开源 sentinel 节点

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 debug
 1) "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,简述,cluster,开源,sentinel,节点
From: https://blog.51cto.com/u_13739602/8429476

相关文章

  • 警惕!91%的开源代码库存在无人维护的开源代码!
    根据Synopsys发布的《2023开源安全和风险分析》报告显示:调研的软件系统中,有76%的软件包含开源软件组件。平均每个代码库由80%的开源代码组成,84%的代码库中包含至少一个已知开源漏洞,比2022年版的OSSRA报告增加了近4%。另外,报告中也提到,审查的1481个含风险评估的代码库中,91%存在过......
  • 开源一套快速部署程序的工具(CI/CD)
    随着微服务越写越多,程序发布就成了一个麻烦事,所以写了一个部署工具Vela,只要填写一个git地址、编译命令等简单信息,就能自动完成程序的部署。Vela特性:代码可在任意一台电脑自动完成编译,再自动上传至服务器可指定程序以Docker容器方式运行编译命令采用终端运行,理论支持......
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
    2023年11月15日,对.net的开发圈是一个重大的日子,.net8.0正式版发布。圈内已经预热了有半个月有余,性能不断超越,开发体验越来越完美,早在.net5.0的时候就各种吹风Aot编译,直到6.07.0使用仍然比较麻烦,我个人比较期待本次更新的aot体验。有的群友几个小时都等不了啦,半夜就开始更新预......
  • prometheus Redis监控方法之二
    背景前期整理过使用exporter+prometheus方式进行Redis监控的搭建过程最近给同事研究clickhouse时发现clickhouse有对应的plugin可以直接拉取CK的信息当时就想其他的中间件肯定有类似的方法进行处理.当时第一反应是想学习使用Oracle,SQLSERVER的pluggin进行监控但是发......
  • 最高加速9倍!字节跳动开源8比特混合精度Transformer引擎
    前言 近年来,Transformer已经成为了NLP和CV等领域的主流模型,但庞大的模型参数限制了它的高效训练和推理。于是字节跳动在2019年12月和2021年6月分别推出了高效推理和训练引擎LightSeq,大大加速了Transformer系列模型的训练和推理,也打通了Transformer从训练到推理......
  • 实时化与Serverless是开源大数据3.0时代的必然选择
    近日在2023云栖大会上,阿里云开源大数据产品进行了年度发布:E-MapReduce、Elasticsearch 等开源大数据产品全面 Serverless 化;创新性推出 Flink 与 Paimon 搭档的新一代流式湖仓;拥抱 AI,推出 Milvus 全托管服务,升级智能运维工具 EMR Doctor 以及 Flink Advisor。核心组......
  • go语言和redis实现发邮件
    如何使用Go语言和Redis实现邮件群发原创 磊丰 Go语言圈 2023-10-3108:30 发表于中国香港收录于合集#学Go语言哪些事儿236个MySQL大牛带你全面剖析与系统梳理数据库(mysql等)知识分享,总结数据库技巧和方法,提升你的技术技能。45篇原创内容公众号G......
  • Redis 缓存与数据库数据不一致问题
    Redis缓存与数据库数据不一致问题是指在使用Redis作为缓存系统时,由于缓存和数据库之间的操作没有同步或处理不当,导致缓存中的数据与数据库中的数据不同步,产生数据不一致的情况。现象:数据库更新后,缓存未更新,导致缓存中的数据是旧的。缓存脏读,即缓存中的数据被更新,而数据库中的数据未......
  • Linux下redis的安装下载以及连接RESP
    一、环境Centos7、redis-6.2.6、gcc依赖、管理员权限将防火墙放通6379/tcp端口或直接关闭防火墙二、安装具体步骤1.安装依赖redis是由C语言开发,因此安装之前必须要确保服务器已经安装了gcc,可以通过如下命令查看机器是否安装:gcc-v如果没有安装则通过以下命令安装:yumins......
  • Redis工具类
    1、重写Redis配置类importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.core.RedisTempla......