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模块实现了主动通知客户端刷新缓存的机制,根据协议类型,实现⽅式如下:
- 普通模式
- ⼴播模式
- 转发模式
开启客户端缓存通知的格式如下:
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)⾄特定的订阅频道。⼯作原理如下:
RDB加载速度优化
在Redis 6.0中,针对RDB文件的实际组成部分,做了对应的加载优化,相比于之前的加载⽅式,可以获得⼤概20%~30%的速度提升 。
INFO命令优化
针对INFO命令的处理做了相关优化,尤其针对⼤量客户端连接场景,性能消耗及时延上有较⼤改进。