更新时间:2024-11-26 GMT+08:00

DCS Redis 6.0支持的新特性说明

DCS的Redis 6.0版本继承了Redis 5.0版本的所有功能增强以及新的命令,同时还兼容开源Redis 6.0版本的新增特性。

RESP3协议

在Redis 6.0中,推出了下⼀代Redis协议-RESP3,相比于RESP2协议,增加了⼀部分新的数据类型。

  • Null:空值,替代RESP2中的*-1、$-1
  • Array:有序集合
  • Simple string:节省空间的安全字符串(非⼆进制)
  • Blob string:⼆进制格式的安全字符串
  • Simple error:节省空间的安全错误码/错误信息(非⼆进制)
  • Blob Error:⼆进制格式的安全错误码/错误信息
  • Boolean:True/False,布尔类型
  • Number:有符号的64位整数
  • Big Number:⼤数字类型
  • Double:浮点数
  • Verbatim string:⼆进制格式的安全字符串,带文本格式
  • Map:无序的键值对
  • Set:⽆序的不重复元素集合
  • Attribute:属性键值对,类似于Map
  • PUSH:带外数据,类似于Array,⽤于Redis服务端主动向客户端推送数据
  • Hello:hello命令返回的响应类型,⽤于客户端、服务端建立连接时使⽤

如需使⽤RESP3协议,需要保证客户端SDK⽀持RESP3协议,否则在建立连接时,与服务端通过hello通信协商使⽤的协议依旧是RESP2协议。

客户端缓存

Redis 6.0中通过TRACKING模块实现了主动通知客户端刷新缓存的机制,根据协议类型,实现⽅式如下:

RESP3
  • 普通模式
  • ⼴播模式
RESP2
  • 转发模式

开启客户端缓存通知的格式如下:

CLIENT TRACKING ON|OFF [REDIRECT client-id] [PREFIX prefix] [BCAST] [OPTIN][OPTOUT] [NOLOOP] 

在RESP3协议中,主要是借助了PUSH类型的消息来实现服务端的主动推送通知。在普通模式中,Redis会记住每个客户端请求的key,当该key所对应的value发⽣变化时,将会发送失效消息(invalidation message)通知对应的客户端集合,但对于每个客户端仅会通知⼀次,即使后续该key所对应的value有其他操作改动,除非客户端在接收到失效消息后,再次通过读取该key的⽅式开启通知。开启普通模式的track功能命令如下 :

CLIENT TRACKING ON 

对于⼴播模式,则根据所track的key prefix来决定在符合key prefix的key所对应的value有所变化时,通知给所有的客户端,如key prefix所匹配的key数量较多,或改动较多,将会导致服务端发送⼤量的失效⼴播消息,消耗⽹络带宽。开启⼴播模式的track功能命令如下:

CLIENT TRACKING ON BCAST PREFIX key-prefix

如客户端SDK不⽀持RESP3协议,只能采⽤RESP2协议的转发模式来实现客户端缓存主动更新通知,需要准备⼀个专⻔⽀持RESP3协议的客户端来作为中转节点,转发来⾃Redis的失效消息(invalidation message)⾄特定的订阅频道。⼯作原理如下:

图1 工作原理

RDB加载速度优化

在Redis 6.0中,针对RDB文件的实际组成部分,做了对应的加载优化,相比于之前的加载⽅式,可以获得⼤概20%~30%的速度提升 。

INFO命令优化

针对INFO命令的处理做了相关优化,尤其针对⼤量客户端连接场景,性能消耗及时延上有较⼤改进。