Redis 3.2.0 发布!
比预期花了更长时间,但我们终于迎来了它,Redis 3.2.0 稳定版已发布,其中的改动可能对大量 Redis 用户有用。到目前为止我已经多次介绍过这些改动,但最重要的包括:
- GEO API。可按经纬度为任意内容建立索引,并按半径进行查询,速度和易用性与其他 Redis 数据结构一样。API 文档见:http://redis.io/commands/#geo。感谢 Matt Stancliff(马特·斯坦克利夫)提供了初始实现,该实现虽经重构但仍是 GEO API 的核心,也感谢 ARDB 的开发者们提供了马特·斯坦克利夫所使用的地理索引代码。
- 新的 BITFIELD 命令允许将 Redis 字符串用作由多个用户指定大小和偏移量的整数组成的位数组。它支持自增和自减操作,可将这些小(或大)整数用作计数器,并可精细控制溢出行为。http://redis.io/commands/bitfield。感谢 Yoav Steinberg(约阿夫·斯坦伯格)推动了这个疯狂的想法并激励我编写了实现。
- 对 Redis Cluster 的多项改进,包括 redis-trib 中的再平衡能力以及更好的副本迁移。不过,对 NAT 环境和 Docker 端口转发的支持虽然已在“unstable”分支中实现,但出于成熟度考虑并未向后移植到 3.2。
- 对 Lua 脚本复制的改进。现在可以使用“effects replication”来编写包含副作用的脚本。相关文档见:http://redis.io/commands/EVAL。感谢 Yossi Gottlieb(约西·戈特利布)推动了该功能的加入并协助了设计。
- 我们现在有了一个强大的 Lua 脚本调试器:https://www.youtube.com/watch?v=IMvRfStaoyM,并且在 redis-cli 中提供了支持。感谢 Itamar Haber(伊塔马尔·哈伯),他自 Lua 脚本功能推出之初就编写非简单的脚本,非常希望拥有这一功能并在开发过程中提供了帮助。
- 得益于 Oran Agra(奥兰·阿格拉)对 SDS 和 Jemalloc 尺寸类别配置所做的改动,Redis 现在的内存效率更高。此外,我们还有一种由马特·斯坦克利夫贡献的新的 List 内部表示,其表示大型列表所用的内存仅为之前的一小部分!
- 最后,在读操作期间,从节点和主节点对于哪些键已过期终于达成了一致。早就该如此了 :-)
- SPOP 现在接受可选的 count 参数。感谢 Alon Diamant(阿隆·迪亚曼特)提供了初始实现。后来我为了性能对其进行了重写,最终得到了一个相当快的实现。
- RDB AUX 字段。现在你的 RDB 文件中包含了一些信息,比如生成它的服务器、生成日期等等。希望很快(在 3.2.1 中)redis-cli 就能解析这些字段。这只是一小部分工作,但老实说,我写这些说明时才想起来。
- RDB 加载现在更快了。
- Sentinel 现在可以扩展以监控多个主节点,但应将其视为高级测试版而非稳定版,因此请在部署前在你的环境中仔细测试,Sentinel 内部有大量代码发生了变更。
- 还有很多其他改动,但这份列表已经够长了。
衷心感谢所有让此次发布成为可能的贡献者,感谢可爱而鼓舞人心的 Redis 用户群体,也感谢 Redis Labs 赞助了 3.2.0 中的大量工作。
在过去几周里,我们还开发了一项将在 Redis 未来版本中发布的有趣新功能,它将在 5 月 10 日至 11 日于旧金山举办的 RedisConf 2016 上公布,敬请关注!
关于稳定性的一点说明。我一直在说,软件的稳定性并非非黑即白。就像粉色、黄色和绿色。不,开玩笑的。通常是灰色的不同深浅。所以 3.2.0 看起来很稳固,但它毕竟是新鲜出炉。建议逐步开始使用并观察其在你环境中的表现,如有任何问题请及时报告。不过,鉴于它在 RC 阶段已停留了很长时间,那些急需新功能而尽快部署的勇敢用户已经对其进行了测试,这也是事实。
3.2.0 的完整更新日志见:https://raw.githubusercontent.com/antirez/redis/3.2/00-RELEASENOTES
可在 http://download.redis.io 以 tarball 形式获取 Redis 3.2.0,或从 Github 上 antirez/redis 仓库获取 3.2.0 标签。
祝使用愉快!
随机一篇博客