Redis 6.0.0 正式版发布!
原文由 Salvatore Sanfilippo 于 发布,订阅该博客
Redis 6.0.0 稳定版终于发布了。这一次,从首个候选版到稳定版正式发布之间的周期相对较短。大约用了四个月,时间不算短,但与我们以往的发布纪录相比,也不算长 :)
所以,重大新特性还是之前已经公布的那些,不过也有一些值得注意的变化。已有的特性包括:SSL、ACL、RESP3、客户端缓存、多线程 I/O、副本上的无盘复制、Redis-benchmark 中的集群支持以及改进的 redis-cli 集群支持、作为 Redis 模块处于 Beta 阶段的 Disque,还有 Redis Cluster Proxy(目前托管于 https://github.com/RedisLabs/redis-cluster-proxy)。
那么,除了稳定性之外,从 RC1 到今天有哪些变化呢?
1. 客户端缓存在某些方面进行了重新设计,尤其是放弃了缓存槽(caching slot)方案,转而直接使用键名。在其他 Redis 核心团队成员的帮助下分析了各种备选方案后,最终来看这种方式更好。除此之外,该功能也终于补上了我待办清单上的剩余部分,尤其是“广播模式”(broadcasting mode),我相信这将成为该功能最受欢迎的使用方式之一。
使用广播模式时,服务器不再需要记住每个客户端请求了哪些键。取而代之的是,客户端订阅键前缀:每当有匹配该前缀的键被修改时,它们都会收到通知。这意味着会产生更多的消息(但仅限于选定的前缀),而服务器端则无需消耗内存。此外,现在还支持 opt-in / opt-out 模式,因此对于未使用广播模式的客户端,也可以精确地告知服务器客户端将要缓存哪些内容,从而减少失效消息的数量。基本上,无论是需要低内存模式,还是需要高度选择性(低带宽)模式,该功能现在都表现得好得多。
2. 这是许多用户长期以来的一个需求。现在 Redis 支持一种模式,即用于复制的 RDB 文件在不再有用时会立即被删除。在某些环境下,让数据仅保留在内存中、而不在磁盘上留存是一个不错的选择。
3. ACL 在几个方面得到了改进。首先,新增了 ACL LOG 命令,可以查看所有违反 ACL 的客户端,包括执行了不该执行的命令、访问了不该访问的键,或是认证失败的情况。该日志实际保存在内存中,因此任何外部程序都可以调用“ACL LOG”来查看发生了什么。这对于调试 ACL 问题非常有用。
但我最喜欢的功能是 ACL GENPASS 的重新实现。现在它基于 SHA256 的 HMAC,并接受一个可选参数,用于告知服务器你希望生成多少位不可猜测的伪随机字符串。Redis 在启动时会从 /dev/urandom 播种一个内部密钥,之后则以计数器模式使用 HMAC 来生成其他随机数:这样你就可以随意调用该 API,想用多少次就用多少次,因为它的速度非常快。想为你的应用生成一个不可猜测的会话 ID?只需调用 ACL GENPASS 即可。以此类推。
4. 复制协议 PSYNC2 得到了改进。Redis 现在能够更频繁地进行部分重同步,因为它现在能够在协议中裁剪掉末尾的 PING,从而让副本和主节点更有可能找到共同的偏移量。
5. 带超时的 Redis 命令现在好用得多:不仅 BLPOP 等以往只接受以秒为单位的命令现在可以接受小数,而且实际的精度也得到了改进,无论连接的客户端数量多少,都能保证其精度不会比当前的“HZ”值更差。
6. RDB 文件的加载速度现在更快了。根据文件实际构成(值是大是小)的不同,你可以预期有 20/30% 的提升。当有大量客户端连接时,INFO 命令的速度现在也更快了,这是一个长期存在的问题,如今终于得到了解决。
7. 我们新增了一个命令 STRALGO,用于实现复杂的字符串算法。目前唯一已实现的是 LCS(最长公共子序列),这是一种重要的算法,除其他用途外,还被用于比较冠状病毒的 RNA(以及一般生物体的 DNA 和 RNA)。当下正在发生的事情影响太过深远,Redis 里面也需要留下一点痕迹。
Redis 6 是迄今为止 Redis 最大的一次版本发布,因此即便它是稳定版,也请谨慎对待,在投入生产前针对你的工作负载进行测试。到目前为止我们还没有发现大的问题,但仍请务必小心。随着我们收集缺陷报告,我们会尽快准备发布 Redis 6.0.1。
衷心感谢在此版本中与我一起编写代码的许多人,也感谢所有赞助了我的工作(感谢 Redis Labs)以及其他贡献者工作的公司(感谢其他公司)。同时也要衷心感谢许多认真报告缺陷的人,他们有时不厌其烦地在我们做出修改后反复验证,或是提出了各种各样的改进建议。
像往常一样,你可以在多个地方找到 Redis 6:在 https://redis.io 上以 tarball 形式获取,以及在 GitHub 仓库中以“6.0.0”标签获取。
祝大家尽情享用 Redis 6,
antirez
随机一篇博客
评论
登录后参与讨论