Redis 6.0.0 GA 发布了!
Redis 6.0.0 稳定版终于发布了。这次,从第一个候选版本到稳定版最终发布,整个周期相对较短。总共花了大约四个月,这并不是一个很短的时间,但与我们过去的记录相比也算不上长了:)
因此,重大更新就是之前宣布过的那些,不过其中有一些值得注意的变化。旧内容包括:SSL、ACLs(访问控制列表)、RESP3、客户端缓存(Client side caching)、Threaded I/O(多线程 I/O)、副本上的无盘复制(Diskless replication)、Redis-benchmark 中的集群支持和改进后的 redis-cli 集群支持、作为 Redis 模块处于 beta 阶段的 Disque,以及 Redis Cluster Proxy(现在位于 https://github.com/RedisLabs/redis-cluster-proxy)。
除了稳定性之外,从 RC1 到今天还有哪些变化呢?
1. 客户端缓存(Client side caching)在一些方面进行了重新设计,尤其是放弃了缓存槽位方案,改为只使用键名。在分析了各种替代方案,并得到其他 Redis 核心团队成员的帮助后,我们最终认为这种方案更好。除此之外,这项功能终于补齐了我在待办列表中计划加入的内容,尤其是“广播模式”,我相信这会成为该功能最常见的使用模式之一。
使用广播模式时,服务器不再尝试记住每个客户端请求过哪些键。客户端转而订阅键前缀:每当匹配该前缀的键被修改时,客户端都会收到通知。这意味着消息会更多(但只针对选定的前缀),同时服务器端不需要付出内存开销。此外,现在还支持 opt-in / opt-out 模式,因此不使用广播模式的客户端可以明确告诉服务器自己将缓存哪些内容,从而减少失效消息的数量。基本上,无论是在需要低内存模式的场景,还是在需要非常有选择性(低带宽)的模式下,这项功能现在都更出色了。
2. 这是许多用户提出已久的请求。现在,Redis 支持一种模式:用于复制的 RDB 文件一旦不再有用,就会立即删除。在某些环境中,最好让数据永远不出现在磁盘上,而只保存在内存中。
3. ACLs 在几个方面得到了改进。首先,新增了 ACL LOG 命令,可以查看所有违反 ACLs 的客户端,包括访问不应访问的命令、访问不应访问的键,或认证尝试失败的客户端。该日志实际上保存在内存中,因此任何外部代理都可以调用“ACL LOG”来查看发生了什么。这对于调试 ACL 问题非常有用。
不过,我最喜欢的功能是重新实现了 ACL GENPASS。现在它使用基于 SHA256 的 HMAC,并接受一个可选参数,用于告诉服务器你希望生成多少位不可猜测的伪随机字符串。Redis 会在启动时从 /dev/urandom 为内部密钥设置种子,之后使用计数器模式下的 HMAC 来生成其他随机数:这样一来,你可以随意调用这个 API,因为它的速度会非常快。想为你的应用生成一个不可猜测的会话 ID?只需调用 ACL GENPASS。诸如此类。
4. 复制协议 PSYNC2 现在得到了改进。Redis 将能够更频繁地进行部分重新同步(partial resynchronization),因为现在它可以裁剪协议末尾的 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),以及赞助其他贡献者工作的公司(感谢其他各家公司)。还要特别感谢许多认真报告 bug 的人;他们有时遵循了反复修改后再次测试这一枯燥的流程,也感谢那些提出各种改进建议的人。
和往常一样,你可以在不同地方找到 Redis 6:在 https://redis.io 下载 tarball,也可以在 Github 仓库中找到标记为“6.0.0”的版本。
享受 Redis 6 吧,
antirez(安特雷兹)
随机一篇博客