在版本4发布的15个月之后,Redis最近宣布了其流行数据库的第5个版本。这个版本的主要特性是对一种新数据类型“流”的支持。流是一种仅能追加的数据结构,可以在相同消费者组内被多个协作的客户端用作日志处理。流就基于Rax实现的,它是个基数树库。
流支持快速查找和范围查询,这些是构建聊天系统、消息代理、排队系统和可以从统一日志模式受益的大多数系统。流在概念上类似于Apache Kafka中支持消费者组的消息传递机制,但本质上又很独特。流还支持消息持久化及主/副本复制功能。这个数据类型在版本4中规划,现在在版本5中已经可以使用,并为其提供了详尽的文档。
Redis 5对排序集做了优化,并提供了新的命令来从排序集的起点和终点弹出元素。ZPOPMAX或BZPOPMAX命令会分别以非阻塞和阻塞模式返回和移除最高分数元素。类似地,ZPOPMIN或BZPOPMIN命令会返回和移除最低分数元素。开发者可以使用排序集的这些命令来模拟列表功能。
在最新版本中,通过引入集群(Clusters)和定时器(Timers)API,Redis模块也得到了扩展。定时器API允许模块创建毫秒精度的定时器以及一个回调函数。集群API(不要与Redis的服务器集群混淆)提供了一种抽象来实现集群化的消息总线。这样,一个节点就可以以类似于发布/订阅系统的方式来向某个特定节点或所有节点发送消息了。
这次版本发布还在背后做了一些性能方面的提升,比如改进的内存热点碎片整理以及改进的HyperLogLog算法。大多数命令现在都支持在客户端使用“<command_name> HELP”快速查看命令行帮助信息,比如,XINFO HELP可以查看新的流功能方面的帮助信息。
新版本中还加入了LOLWUT命令,对Redis用户来说,这个命令更像是一个复活节彩蛋,技术上倒用处不大,因为LOLWUT会产生Georg Nees的Schotter这样的计算机艺术的随机变体。花费一些不产生技术价值的时间来探索60年代的某些事物,LOLWUT就诞生于这样的需求。在那个年代,作者认为更容易“用黑客视角谈论技术,没有障碍或者预先思索过的想法,极限就是探索”。
除了需要向后兼容的场景,最新的Redis版本终于不再使用“从”(slave)这个术语了,而改为使用“副本”(replica)。