Redis史上最大更新版本6出炉!

Redis之父Salvatore Sanfilippo在自己的博客,发布了Redis 6正式版发布的消息,并且解释了正式版与第一候选版之间的差异。Redis 6加入了许多新功能,包括RESP3、客户端缓存、多线程I/O、SSL加密和ACL等,Salvatore Sanfilippo表示,虽然这是史上最大的版本,但也是最多人参与开发的一个版本,从第一候选版到最终版本,花费的时间比起过去的版本还要短。

Salvatore Sanfilippo认为Redis 6中最重要的更新,便是新的Redis协议RESP3,RESP3带来了更丰富的功能,使得接口函数库可以更好地映射主机语言中各类型的Redis回应,此外,新协议还为客户端函数库瘦身铺路,最终将可让用户更快速地采用指令和模块。

而且由于新协议RESP3的出现,Redis才得以支持客户端缓存(Client Side Caching)功能。当客户端需要能够快速存储资料或是缓存操作时,便需要在客户端存储一小部分信息,以减少应用程序截取资料的延迟,但要达到这个目的,系统必需要能够控制资料的有效性,RESP3让服务器能够对客户端发送资料失效消息,让存储在客户端内存中过时的资料失效。这个功能在不少数据库都有提供,而Redis终于在第6版本更新协议,添加客户端缓存功能。

Salvatore Sanfilippo提到,在发布第一候选版之后,他们重新设计了客户端缓存,使用键值名称来实例,由于这个方法比原先的更好,因此连积压的功能广播模式也都完成了,用户在使用广播模式时,服务器不会存储每个客户端请求的键值,而是由客户端订阅键值前缀,当有与前缀相符的修改才会收到通知,也就是说服务器能够提供更多的消息,但是服务器的内存消耗不会因此增加。

而且客户端也能够选择退出广播模式,将缓存的内容准确的告诉服务器,以减少无效消息的数量。新方法无论是在低内存或是低带宽需求,都能够运行得更好。

Redis 6支持了访问控制列表(Access Control List,ACL),赋给Redis具有用户的概念,每个用户拥有一组定义的功能,这些功能指示用户能够执行的命令还有键值。目前Java、Node.js、Python和.NET中的Redis客户端都已经支持ACL,官方表示,由于Redis 6已经正式发布,他们会加速其他语言的支持。

正式版比第一候选版,还多了一个ACL LOG指令,该指令能呈现所有违反ACL的客户端,像是访问不应该访问的指令,或是尝试失败的身份验证。日志本身是存在内存中,每个外部代理都能够调用ACL LOG查看已发生的事件,对于ACL调试很有帮助。

除了ACL,Redis 6还支持了SSL加密流量的功能,在这版本之前,Redis的加密都必须在程序之外进行,也就是说需要使用其他应用程序来进行加密,官方提到,更糟糕的是,有许多执行实例干脆不加密,因此Redis 6提供SSL,可以说是在安全性上向前进了重要的一步。

另外,由于Redis一直是单线程基础架构,因此不少用户也提出要求,希望Redis能支持多线程,借以进一步提升性能,因此在Redis 6中,虽然核心的部分仍保留单线程资料访问接口,但是在I/O的部分已经是多线程。通过使用不同的线程来处理读取和写入工作,让Redis程序可以将更多的计算资源放到操作、存储和检索资料中,进而提升整体性能。