文章目录
五一期间,Redis 6.0.0 稳定版(GA)终于发布,Redis 6.0 最终的发布一共经历了四个 RC(Release Candidate)版,从第一个候选版本的发布到一个稳定版本前后经历了大概四个半月(Redis 6.0 RC1 于 2019-12-19 发布)。Redis 6 是 Redis 有史以来最大的版本,虽然现在发布了 GA 版,但是在将它投入生产之前仍然需要谨慎。本文将介绍 Redis 6.0 RC1 到 GA 版本除稳定性相关之外的新功能或改进。
客户端缓存进行了重新设计
Redis 6.0 RC1 到 GA 版本,Redis 客户端缓存在某些方面进行了重新设计,特别是放弃了缓存槽(caching slot)方法而只使用 key 的名称。在分析了备选方案之后,在其他 Redis 核心团队成员的帮助下,这种方法最终看起来更好。
客户端缓存重新设计中引入了广播模式(broadcasting mode)。在使用广播模式时,服务器不再尝试记住每个客户端请求的 key。 取而代之的是,客户订阅 key 的前缀:每次修改匹配前缀的 key 时,这些订阅的客户端都会收到通知。这意味着会产生更多的消息(仅适用于匹配的前缀),但服务器端无需进行任何内存操作。
用于复制的 RDB 文件如果不再有用,它将立即被删除
现在,Redis 支持一种模式,就是用于复制的 RDB 文件如果不再有用,它将立即被删除,这个需求是大家很早之前就非常期待的。不过,在某些环境中,最好不要将数据放在磁盘上,而只放在内存中。
ACL 有所提升
ACL在某些方面做的更好。 首先,Redis 6.0 有一个新的 ACL LOG 命令,该命令允许查看所有违反 ACL 的客户端,访问不应该访问的命令,不应该访问的 key 或尝试失败的身份验证。这些日志实际上是在内存中,因此每个外部代理都可以调用 ACL LOG 来查看发生了什么,这对于调试 ACL 问题非常有用。
PSYNC2 复制协议进行了改进
复制协议 PSYNC2 现在得到了改进。Redis 将能够更频繁地部分重新同步,因为它能够修整协议中的最终 PING,从而使副本和主副本更有可能找到一个公共的偏移量。
带有超时的 Redis 命令现在要好用得多
除了 BLPOP 命令,其他用于接受秒的命令现在都接受十进制数字,而且实际分辨率也得到了改进,以使其永远不会比当前的“HZ”值更差,因为其不管连接客户机的数量。
RDB文件现在加载速度更快了
Redis 6.0,RDB 文件的加载速度比之前变得更快了。根据文件的实际组成(较大或较小的值),大概可以获得 20-30% 的改进。除此之外,INFO 也变得更快了,当有许多客户端连接时,这会消耗很多时间,不过现在终于消失了。
新的 STRALGO 命令
STRALGO 实现了复杂的字符串算法。 目前唯一实现的是 LCS(最长的公共子序列),它是一种重要算法,用于比较冠状病毒的RNA (以及其他生物的DNA和RNA)。
支持多线程 IO
众所周知,Redis 在过去一直都是用单线程模型来处理数据的。但是对于单线程 Redis 来说,性能瓶颈主要在于网络的 IO 消耗, 所以如果采用多线程 IO,优化的方向主要有以下两点:
- 提高网络 IO 性能,典型的实现像使用 DPDK 来替代内核网络栈的方式;
- 使用多线程充分利用多核,典型的实现像 Memcached。
从 Redis 6.0 RC1 起,Redis 提供了可选的多线程模型,以此来满足不同用户的需求。国外有同学对比了 Redis 多线程和单线程的 SET 和 GET 性能,
截止到本文编写时,Redis 已经发布了 6.0.1 版本,这个版本主要是解决一些小的 bug,具体参见 Redis 6.0 release notes。
Redis 6.0 Release Note:https://raw.githubusercontent.com/antirez/redis/6.0/00-RELEASENOTES
本文翻译自:Redis 6.0.0 GA is out!
原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【Redis 6.0 稳定版发布,支持多线程 IO】(https://www.iteblog.com/archives/9804.html)