Redis 是单线程吗?

Redis是一个基于内存的高性能键值数据库,通常被称为单线程模型。它通过主线程处理客户端请求,进行读写操作。文章提到了Redis的后台线程,主要用于日志、定时任务和持久化操作,如AOF刷盘(同步和异步)以及处理关闭文件。在Redis6.0之后,开始支持多线程。
摘要由CSDN通过智能技术生成

                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之前还打算想加上个多线程

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值