Redis Streams 开发进展更新
我看到有不少用户问我 Streams 的进展如何、什么时候能用于生产环境,以及这项功能大致的预计完成时间和开发计划。本文将尝试对接下来的安排做一些说明。
首先,目前 Streams 是我的首要任务:我希望完成这项我认为对 Redis 社区非常有用的工作,然后立即开始 Redis Cluster 的改进计划。实际上,Cluster 的工作已经开始了,我的同事 Fabio Nicotra(法比奥·尼科特拉)正在将 redis-trib 这个 Cluster 管理工具移植到历史悠久、好用的 redis-cli 中。这一步涉及将代码从 Ruby 翻译成 C。与此同时,几周前我已经完成了 Streams 核心部分的编写,并删除了“streams”功能分支,将所有内容合并进“unstable”分支。
之后我又重新多次审阅了 consumer groups(消费者组)的规范。几周前,我终于对结果感到满意,于是开始实现这份规范:https://gist.github.com/antirez/68e67f3251d10f026861be2d0fe0d2f4。请注意,命令名称发生了相当大的变化……API 大致会是这样:https://gist.github.com/antirez/4e7049ce4fce4aa61bf0cfbc3672e64d。
目前进度过半。今天写完前 500 行代码后,我已经能够看到客户端使用 XREADGROUP 命令,在获取旧消息时只查看自己的本地历史记录。这是实现过程中的一个里程碑。此外,XACK 现在也已经可用。基本上,支持 Streams consumer groups 的所有数据结构都已经能够工作,但我还需要完成所有命令的实现,在 XREADGROUP 中支持阻塞操作,处理复制,以及 RDB 和 AOF 持久化等。大致再过一个月,我应该就能全部准备就绪。
由于 consumer groups,Streams 的 RDB 格式将会相比“unstable”目前使用的格式发生很大变化。既然兼容性本来就要被打破,我们也会增加让 RDB 文件持久化保存键的最后访问信息的能力,这样涉及 RDB 的 Redis 重启(或从库加载)就能获得继续以正确方式执行键淘汰所需的全部信息。而现在,这些信息都会丢失。由于 RDB 的这次重大变更,计划也做了一些调整:Streams 将出现在 Redis 5.0 中,而不是 4.0 中;不过 5.0 大约会在两个月后作为 GA 版本发布。这之所以可行,是因为 5.0 只会是“4.0 加上 Streams”,除了 RDB 变更之外不会包含其他重大功能……
简而言之:除了一些时间用于检查关键问题的 PR / Issue 外,我几乎全职投入在 Streams 上;两个月后,如果你升级到 Redis 5.0,就会拥有已经完全实现 consumer groups、可用于生产环境的 Streams。此外还有相当多的文档工作要做。我们进入 RC1(大约一个月后)后,我会编写命令手册以及一份全面介绍 Streams 的文档,这样在候选版本阶段,人们就能有文档支持自己的测试。
希望这能说明 Streams 的进展。Redis 5.0 再见 :-)
随机一篇博客