近期Redis 6.0.0稳定版发布了,是Redis有史以来最大的版本, Redis的作者在博客中介绍了该版本中的新特性,此外除了这些新特性外,Redis 6也正式支持多线程!意味着从此不能单纯的说Redis是单线程模型了。本文我们先来看看Redis 6.0.0 GA版本都有哪些新特性,然后介绍下Redis对多线程的支持。
Redis 6.0 稳定版特性一览
那么,从RC1到今天,除了稳定之外,还有什么变化呢?
1、重新设计了客户端缓存,特别是放弃了caching slot,而只使用key names。
2、现在Redis支持这样一种模式:如果用于复制的RDB文件不再有用,它将立即删除。在某些环境中,最好不要将数据放在磁盘上,而只放在内存中。
3、acl在特点方面变得更好。首先,有一个新的ACL日志命令,它允许查看所有违反ACL的客户机、访问不应该访问的命令、访问不应该访问的密钥,或者验证尝试失败。日志实际上在内存中,因此每个外部代理都可以调用“ACL log”来查看发生了什么。这对于调试ACL问题非常有用。
4、改进了复制协议PSYNC2。Redis能够更频繁地部分重新同步,使副本和主副本找到公共偏移。
5、带有超时的Redis命令现在不仅BLPOP并且以前可以接受秒的命令现在可以接受十进制数。
6、RDB文件现在加载速度更快。根据文件的实际组成(较大或较小的值),可以预期20/30%的改进。当有很多客户机连接时,信息也更快了,这是一个老问题,现在终于解决了。
7、我们有一个新命令STRALGO,它实现了复杂的字符串算法。目前唯一实现的是LCS(longest common subsequence),这是一种重要的算法,用于比较冠状病毒的RNA(以及其他生物体的DNA和RNA)。
Redis 6.0 开始支持多线程
之前Redis的作者 Salvatore 就在 RedisConf 2019 分享过,其中一段展示了 Redis 6 引入的多线程 IO 特性对性能提升至少是一倍以上。
目前对于单线程 Redis 来说,性能瓶颈主要在于网络的 IO 消耗, 优化主要有两个方向:
提高网络 IO 性能,典型的实现像使用 DPDK 来替代内核网络栈的方式
使用多线程充分利用多核,典型的实现像 Memcached
因此,从Redis 6.0 RC1起,Redis提供了可选的多线程模型,以此来满足不同用户的需求。社区对比了 Redis 多线程和单线程的 SET 和 GET 性能,表现如下:
以上就是Redis 6.0.0的新特性及多线程IO支持方面的介绍。虽然Redis 6 GA版本是Redis有史以来最大的一个版本,它也是稳定的,但Redis作者也坦言要谨慎使用,在投入生产之前要做必要的工作负载测试。社区也将准备尽快发布Redis6.0.1。
点击左下方阅读原文查看英文官宣 Redis 6.0.0 GA is out!
往期推荐 点击标题可跳转
1、HBase实践 | HBase IO优化与高可用建设
2、MapReduce Shuffle 和 Spark Shuffle 结业篇