redis 只使用一个线程,处理所有的命令请求
不是说 redis 服务器进程内部真的就只有一个线程
其实也有多个线程,多个线程是在处理 网络IO
redis 能够使用 单线程模型 很好的工作,原因主要在于 redis 的**核心业务逻辑,都是短平快的**,不太消耗 cpu 资源也就不太吃多核了!!! 因此 redis 必须要特别小心,某个操作占用时间长,就会阻塞其他命令的执行
一、redis 的线程安全问题?
假设有多个客户端,同时操作一个 redis 服务器
当前这两个客户端,也相当于“并发”的发起了上述的请求
此时就意味着是否服务器这边也会存在类似的线程安全问题呢
幸运的是,并不会
redis 服务器实际上是单线程模型,保证了当前收到的这多个请求是串行执行的!!!
多个请求同时到达 redis 服务器,也是要先在队列中排队
再等待 redis 服务器一个一个的取出里面的命令再执行
微观上讲,redis 服务器是串行/顺序执行这多个命令的
二、redis 虽然是单线程模型,为什么效率这么高呢,速度这么快呢(参照物是数据库)
1、redis 访问内存、数据库则是访问硬盘
2、redis 核心功能,比数据库的核心功能更简单
数据库对于数据的插入、删除、查询等操作都有更复杂的功能支持,这样的功能势必要花费更多的开销 比如,针对插入、删除,数据库中的各种约束,都会使数据库做额外的工作
3、单线程模型,避免了一些不必要的线程竞争开销
redis 每个基本操作,都是短平快的,就是简单操作一下内存数据,不是什么特别消耗 cpu 的操作,就算搞多个线程,也提升不大