简述几个我们对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 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_PASSWORDOK在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 listid=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开源社区所做的贡献的更多相关文章
- 做一名开源社区的扫地僧——从Bug report到Google Summer of Code(GSoC):从200个bug到5000美金
今年的软件自由日(SFD),我在广州Linux用户组的线下活动上做了一个分享,主题叫做<做一名开源社区的扫地僧(上)>.我把演讲的内容重新整理扩充, 写出了文字版, 希望可以跟更多朋友分享 ...
- Redis .NET开源组件Beetle.Redis
Redis .NET开源组件Beetle.Redis Beetle.Redis是一款开源的Redis Client for .net组件,它提供非常简便的操作方式可以让开发人员轻松地访问Redis,同 ...
- .NET redis 客户端开源组件 FreeRedis (继 CSRedisCore 之后重写)
什么是 FreeRedis FreeRedis 是一款 .NET redis 客户端开源组件,以 MIT 协议开源托管于 github,目前支持 .NET 5..NETCore 2.1+..NETFr ...
- Springboot +redis+⾕歌开源Kaptcha实现图片验证码功能
Springboot +redis+⾕歌开源Kaptcha实现图片验证码功能 背景 注册-登录-修改密码⼀般需要发送验证码,但是容易被 攻击恶意调⽤ 什么是短信-邮箱轰炸机 手机短信轰炸机是批.循环给 ...
- 500G !!史上最全的JAVA全套教学视频网盘分享 (JEECG开源社区)
500 G JAVA视频网盘分享(JEECG开源社区) [涵盖从java入门到深入架构,Linux.云计算.分布式.大数据Hadoop.ios.Android.互联网技术应有尽有] JEECG开源社区 ...
- 500 G JAVA视频网盘分享(JEECG开源社区)
500 G JAVA视频网盘分享(JEECG开源社区) [涵盖从java入门到深入架构,Linux.云计算.分布式.大数据Hadoop.ios.Android.互联网技术应有尽有] [转载:h ...
- 500G JAVA视频网盘分享 (JEECG开源社区)
500 G JAVA视频网盘分享(JEECG开源社区) [涵盖从java入门到深入架构,Linux.云计算.分布式.大数据Hadoop.ios.Android.互联网技术应有尽有] J ...
- 备战春招!开源社区系统 Echo 超全文档助力面试
博主东南大学硕士在读,寒假前半个月到现在差不多一个多月,断断续续做完了这个项目,现在终于可以开源出来了,我的想法是为这个项目编写一套完整的教程,包括技术选型分析.架构分析.业务逻辑分析.核心技术点分析 ...
- redis、memcache、mongoDB 做了对比
from: http://yang.u85.us/memcache_redis_mongodb.pdf 从以下几个维度,对redis.memcache.mongoDB 做了对比. 1.性能 都比较 ...
- Tornado的一个开源社区
https://link.zhihu.com/?target=http%3A//www.tornadoweb.org/en/stable/ 基于Tornado的一个开源社区 GitHub - shiy ...
随机推荐
- shell 编程变量使用心得
类型 示例 用途 大写的变量名 IP 表示常量,比如,用来记录输入和输出文件名 小写变量名 mac 一般变量 左边下划线 _mac 临时的中间变量,只引用一次的变量 右边下划线 tmpfile_ 临时 ...
- 通过jmeter上传/导入文件
系统性能测试,需要模拟生产环境搭建应用服务和建造环境数据,最大限度的还原生产环境,使系统性能测试的指标更加合乎实际,真实.准确. 如某项目财务系统中的薪资管理模块做工资计算的压测,需要在系统内造179 ...
- 免费拥有自己的 Github 资源加速器
TurboHub 是一个免费的 Github 资源加速下载站点,可以帮助你快速下载 Github 上的资源.其核心逻辑是通过 Azure Static Web Apps 服务和 Azure Funct ...
- Elasticsearch 保姆级入门篇
Elasticsearch 是一个分布式的.面向生产规模工作负载优化的搜索引擎. Kibana 可以将 Elasticsearch 中的数据转化为直观的图表.图形和仪表盘. 这篇文章,您将学习本地安装 ...
- 前后端分离中台框架 Admin.Core 学习-介绍与配置说明
中台框架后端项目 Admin.Core 的介绍与配置说明 中台admin是前后端分离权限管理系统,Admin.Core为后端项目,基于.NET 7.0开发. 支持多租户.数据权限.动态 Api.任务调 ...
- 零代码,使用 Dify 和 Laf 两分钟接入企业微信 AI 机器人
Dify 允许创建 AI 应用,并提供二次开发的能力.这里我将演示创建一个法律问答助手的 AI 应用,称作"知法".在本篇教程中,我将指导你为"知法"接入企业微 ...
- 《CTFshow-Web入门》05. Web 41~50
@ 目录 web41 题解 原理 web42 题解 原理 web43 题解 原理 web44 题解 原理 web45 题解 原理 web46 题解 原理 web47 题解 web48 题解 web49 ...
- 使用API接口获取淘宝商品数据的详细指南
在电商行业中,淘宝作为中国最大的在线购物平台,每天有数以百万计的商品被发布和交易.作为程序员,如果需要获取淘宝商品的详细数据,可以通过调用API接口来实现.本文将详细介绍如何使用淘宝API接口获取 ...
- SpringSecurity简明教程
SpringSecurity主要实现UserDetailsService来验证登录的用户信息,和Security的配置类来对登录方式和资源进行限制. 案例包含利用数据库进行登录验证.URL访问限制.自 ...
- Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!
关注TechLeadCloud,分享互联网架构.云服务技术的全维度知识.作者拥有10+年互联网服务架构.AI产品研发经验.团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师, ...