概要
对于redis我们一直有一个误区就是redis就是单线程,其实这个是很早的redis的版本了,在4.0版本以下,redis确实只使用了单线程,对于4.x的版本,redis虽然引入了多线程但是实际使用并不多,对性能提升也比较有限,导致了大家对于redis的多线程这个概念比较忽视,但是对于redis6.x的版本,redis多线程对于性能的提升还是很大的。
3个版本的对比
-
redis 3.x不支持多线程,请求数据顺序执行,对于多个客户端并发访问redis-server时的执行状态如下,我们假如每个圆圈的执行时间是一致的代表一个执行单位,那么redis3.x的执行时间就是六个执行单位。
-
. 对于redis4.x而言,其能支持的多线程的命令比较有限。
- ***unlink:***用于删除指定的 key ,就像 DEL 一样,如果 key 不存在,则将其忽略。
- ***flushall :***清空整个 Redis 中的数据(清空所有数据库的所有 key,不仅仅是当前 select 的数据库 )。
- ***flushdb:***清空当前 select 数据库中的所有 key。
-
对于redis6.x,开启多线程执行后,主线程的顺序执行只在执行阶段,前置的解析阶段,到后面的返回阶段都可以交由子线程去执行。
小结
通过上面的图示,我们就可以明显的看出redis各个版本对于多线程执行支持,和redis处理当中哪些环节可以通过异步多线程去处理