Redis 是单线程吗?

  • Post author:
  • Post category:其他


redis单线程不就是 发一个命令

接收了到客户端的请求

然后

计算请求(就是解析如果参数不正确就会返回错误那对的就会进行下一步),

然后

读写操作,再然后就是发送给客户端,

然后就等待

下一个命令

这个流程是由一个线程来完成的 就是主线程。

在redis启动的时就会启动

后台线程



后台线程

就是 当所有

前台线程



主线程

)都退了那么

后台线程

也会退 它是不会干扰程序的退出的,一般是用来执行一些日志(将运行日志放到文件中),定时任务(定时回收垃圾呀等等) 这些都是不会阻止前台线程)

或者说

redis 后台线程用来处理后天运行任务的 比如一些持久化的操作还有删除过期的key呀 复制(主从复制)等等操作

先说说redis 2.6版本:

redis2.6版本它是会启动两个

后台线程的

第一个是

AOF刷盘

,第二个是

处理关闭文件


AOF刷盘 :   AOF

的意思就是持久化  或者  将所有写操作都存入到

AOF

文件中 可以理解为当redis重启时就会通过

AOF

来恢复数据,这有个问题要保证数据的可靠性,就会将

AOF

文件中的数据

刷盘到硬盘上


AOF刷盘有两种操作:

第一种存在一个问题 就是要等待I/O操作完成之后才能执行其他的操作


第一种:文件同步



讲AOF文件中的数据刷到硬盘上,这可以确保数据的可靠性


第二种:文件异步





AOF

文件中的数据异步的写入硬盘上 这种方式虽然对性能的影响很小,但是可能会导致数据的丢失 为什么呢 ? 如果

redis

突然挂了或者停电了 然后数据没来得及写入硬盘中就会导致数据丢失,就可以采用

aof-use-rdb-preamble

在 Redis中,

aof-use-rdb-preamble

默认就是

yes

这就意味着在

AOF

重写时 是否使用RDB文件作为重写的起点(意思就是如果redis重启时就会先加载RDB文件中的数据)然后再通过AOF文件来恢复数据,这种方式可以加快redis 的启动速度 ,并且减少AOF 文件的大小 ,

不过需要注意的是 如果在RDB 文件和AOF 问就直接出现故障,可能会出现数据的丢失  是需要根据实际情况来做决定的


处理关闭文件:


比如 要 操作持久化操作时  然后redis就会将数据写入到AOF文件 中 这个时候就需要打开AOF文件操作 进行写操作  操作完成之后关闭文件 以及释放资源

关闭文件就使用C语言提供的fclose函数来关闭文件  因为redis是C语言写的嘛


Redis 真的是单线程吗?

redis 4.0 版本的时候确实支持多线程但那个时候并没有发布到官网

redis6.0之前是支持多线程的


Redis 是支持多线程的

在redis6.0之后就完全支持多线程的  redis6.0之前还打算想加上个多线程



版权声明:本文为qq_67394089原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。