Redis 6 终于还是迎来了多线程版本!

JAVA herman 330浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:codedq,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:codedq,之前的微信号好友位已满,备注:返现
饿了么大量招人,我内推!Java 方向!薪资不设上限,工作年龄不限!工作地点限魔都,可电话面试!简历,发我微信:codedq
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

今天是 5 月 3 号,五一假期已经过半,相信不少人假期余额已经不足了!昨天 Redis 6.0 版本正式发布,Redis 终于还是迎来了多线程!

Redis 6.0 版本,本来是预计在 2019 年底发布,可是由于改动太大,6.0.1 的正式版本直到昨天才正式推出。

Redis 6

Redis 6 版本的更新主要有 5 个部分。分别是:Redis 6.0-RC1、Redis 6.0-RC2、Redis 6.0-RC3、Redis 6.0-RC4、Redis 6.0.0 GA。

细节部分,根据我的统计,新功能特性加上修复的 Bug,大大小小超过 60 个。

其中最能引起大家轰动的功能应该是多线程 IO 功能。其实 Redis 自发布以来,并不是一个单线程程序。严格意义上来讲,Redis 并不是单线程。它也有后台线程在工作,处理一些较为缓慢的操作,例如无用连接的释放、大 key 的删除等等。

但是客户端命令的请求获取 (socket 读)、解析、执行、内容返回 (socket 写) 等等都是由一个线程处理,所有操作是一个个挨着串行执行的 (主线程),这也是 Redis 有 “单线程” 定义的来源。

单线程机制使得 Redis 内部实现的复杂度大大降低,Hash 的惰性 Rehash、Lpush 等等 “线程不安全” 的命令都可以无锁进行。

但是这套机制也使得 Redis 的 QPS 难以更上一层楼。Redis 本身的数据结构设计,内存管理已经做得接近尽善尽美。要 Redis 单机性能进一步提升,引入多线程并发处理任务是最直观的方案之一,和 memcached 对齐。

于是,Redis 的多线程版本,早就引起了广泛的讨论。

Redis 多线程

多线程特性在社区也被反复提了很久后,Redis 的作者 antirez 终于在 Redis 6 加入多线程。

因为读写网络的 read/write 系统调用在 Redis 执行期间占用了大部分 CPU 时间,如果把网络读写做成多线程的方式对性能会有很大提升。现在已经实现了第一版,write side 即回复客户端这部分已经完成了,并且去掉了主线程和 IO线程之间的互斥锁,采用 busy loop 的形式来等待 io 线程工作结束,这部分能够有 50% 的性能提升。

Redis 多线程模型

目前已经有国外网友针对单线程和多线程版本的 Redis 进行了性能测试。

Redis 单线程、多线程 Get 性能对比
Redis 单线程、多线程 set 性能对比

从上图中可以看到,多线程的优势还是非常的明细,几乎有翻倍的提升。

除了多线程以外,本次升级在性能,协议,权限控制方面都有较大的改进。还是希望大家充分测试过一直在进行升级,以免影响到大家的生产系统!另外,值得一提的是,Redis 的执行命令操作内存的仍然是个单线程!

关于 Redis 6 版本的更多细节,推荐大家阅读:https://raw.githubusercontent.com/antirez/redis/6.0/00-RELEASENOTES

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号1:xmtxtt(5000人已满),微信号2:xttblog(5000人已满),微信号3:codedq(超3800)。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » Redis 6 终于还是迎来了多线程版本!