Redis 新特性6.0
Redis6.0新版本在五月初重磅发布,我们可以清晰地发现Redis6.0新版本引入了多线程。相信大家一定都十分好奇,Redis6.0引入多线程究竟有哪些好处呢?下面我们就来逐一分析一下引入多线程的诸多好处~
1、解决单线程的局限性
我们都知道Redis之前一直不引入多线程,是因为单线程的使用可维护性高,不同于多线程系统复杂度的增加和各种问题容易出现的性能损耗。
但随着越来越复杂的业务场景,有些公司动不动就上亿的交易量,因此需要更大的QPS。而旧版本的Redis服务器可以处理80,000到100,000 QPS,这也是Redis处理的极限了。
常见的解决方案是在分布式架构中对数据进行分区并采用多个服务器,但该方案有非常大的缺点。例如:
要管理的Redis服务器太多,维护代价大
某些适用于单个Redis服务器的命令不适用于数据分区
数据分区无法解决热点读/写问题
数据偏斜,重新分配和放大/缩小变得更加复杂
而且,Redis的多线程部分只是用来处理网络数据的读写和协议解析,执行命令仍然是单线程顺序执行。所以我们不需要去考虑控制 key、lua、事务,LPUSH/LPOP 等等的并发及线程安全问题。
2、突破Redis自身瓶颈
(1)分摊 Redis 同步 IO 读写负荷
因为读写网络的read/write系统调用占用了Redis执行期间大部分CPU时间,瓶颈主要在于网络的 IO 消耗, 优化主要有两个方向:
提高网络 IO 性能,典型的实现比如使用 DPDK 来替代内核网络栈的方式;
使用多线程充分利用多核,典型的实现比如 Memcached。
因此,Redis6.0引入多线程一下子就分摊了Redis同步IO读写负荷。
(2)充分利用服务器CPU资源
议栈优化的这种方式跟Redis关系不大,支持多线程是一种最有效最便捷的操作方式。
所以总结起来,Redis支持多线程主要就是因为可以充分利用服务器 CPU 资源,目前主线程只能利用一个核。
3、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,这是一种重要的算法,用于比较冠状病毒的RNA(以及其他生物体的DNA和RNA)。