Redis 创始人宣布 Redis 6.0.0 稳定版正式 GA。
从首个 RC 版本到正式 GA 经历了四个月左右的时间,重要的新特性已在 RC1 中公布过:
- 许多新的模块 API(modules API)
- 更好的过期周期(expire cycle)
- SSL
- ACL
- RESP3
- 客户端缓存
- 线程 I/O
- 在副本上进行无盘复制
- Redis-benchmark 集群支持与 Redis-cli 改进
- Systemd 支持重写
- Redis 集群代理与 Redis 6 一起发布(位于不同仓库)
- Disque 模块与 Redis 6 一起发布(位于不同仓库)
正如 Redis 作者 antirez 所说,这是迄今最“企业”化的版本(SSL 与 ACL 等特性与企业极相关),也是最大的版本,同时也是参与人数最多的版本。GA 版本除了比 RC1 更稳定,还对部分功能进行了重新设计或是进一步的改进。
- 对客户端缓存某方面的功能进行了重新设计,主要是放弃了“缓存插槽”(caching slot)改为使用键名(key name)。另外还新增了“广播模式”(broadcasting mode),当使用广播模式时,服务器不需要记住每个客户端请求的 key。相反,客户端会订阅 key 的前缀:每当有匹配前缀的 key 被修改时,客户端就会收到通知。
- 用于主从复制的 RDB 文件如果不再使用会被删除
- 新的 ACL LOG 命令,可查看不遵循 ACL 权限的客户端(例如访问了无权限的命令和 key,以及验证失败),主要用于调试 ACL 问题。此外还有重新实现的 ACL GENPASS,它使用了基于 SHA256 的 HMAC 加密算法。
- 改进 PSYNC2 主从复制协议
- 改进 Redis 命令行的超时选项
- 提升 RDB 文件的加载速度(~20/30% 的提升)
- 新的 STRALGO 命令,实现了复杂的字符串算法。这是一个重要的算法,主要用于比较冠状病毒的 RNA(以及其他生物体的 DNA 和 RNA)
重要新特性介绍
RESP3
这是 Redis 6 中的新网络协议,但它是可选的,连接以 RESP2 模式开始,只有使用新的 HELLO 命令进行握手时,才进入新的协议模式。为什么要使用新协议?因为旧的语义不够。此外,RESP3 中还有其它功能,但是主要能力还是直接从 Redis 返回复杂的数据类型,而客户端对于数据类型的转换是透明的。
ACL
作者认为 Redis 需要 ACL,因为人们在更大的环境中需要更好地控制哪些客户端可以执行某些操作。同时,向 Redis 添加 ACL 的另一个要点是隔离,以保护数据免受应用程序错误的侵害。Redis 中还为 ACL 提供了 Redis 模块接口,因此开发者可以编写自定义身份验证方法。
SSL
这一特性值得一提的是,工作是完全在没有 antirez 参与的情况下完成的,这显示了 Redis 开发过程的变化。这可能需要简单结合一下背景:Redis 6 中 commit 次数最多的是 antirez,达到 685 次,而排在第二位的 zhaozhao.zz commit 数量是 81。
客户端缓存
antirez 此前已经详细介绍过该特性,我们也有相关分享:Redis 6 将采用全新协议 RESP3,以提供客户端缓存功能。当使用者需要进行快速存储或快速取操作时,就需要在客户端内存中存储一小部分信息,这可以降低程序获取数据时的延迟。
但是现在 antirez 认为这是 Redis 6 最不成熟的特性,他想在 Redis 6 GA 之前对此进行改进。可能会添加一个新模式,该新模式要求服务器不维护有关客户端的状态,或者根本不维护任何状态,并与更多消息进行交易。目前某些“缓存插槽”中过期的信息无法单一合并,antirez 表示一月份关于此特性还有更多工作要做。
Disque 成为模块
Disque 目的是构建分布式的内存中消息代理,此前它是一项实验功能,现在在 Redis 6 中成为模块,它可以支持集群消息总线 API,可以阻止和恢复客户端、支持计时器、模块私有数据的 AOF 和 RDB 控制功能。
集群代理
在 Redis 集群中,客户端会非常分散,现在为此引入了一个集群代理,可以为客户端抽象 Redis 群集,使其像正在与单个实例进行对话一样。同时在简单且客户端仅使用简单命令和功能时执行多路复用。
模块
Redis 6 的模块 API 达到了一个新高度,发展迅速,因为 Redis Labs 从零开始就使用模块系统来开发非常复杂的内容,使得 Redis 实际上变成一个框架,可以将系统作为模块来编写,而不必从头开始发明所有东西。
详情查看 http://www.antirez.com/news/132
下载地址 https://redis.io/download