Redis单线程模型 redis 为什么是单线程?为什么 redis 单线程效率还能那么高,速度还能特别快

简介: 本文解释了Redis为什么采用单线程模型,以及为什么Redis单线程模型的效率和速度依然可以非常高,主要原因包括Redis操作主要访问内存、核心操作简单、单线程避免了线程竞争开销,以及使用了IO多路复用机制epoll。

redis 只使用一个线程,处理所有的命令请求

不是说 redis 服务器进程内部真的就只有一个线程

其实也有多个线程,多个线程是在处理 网络IO

    redis 能够使用 单线程模型 很好的工作,原因主要在于 redis 的**核心业务逻辑,都是短平快的**,不太消耗 cpu 资源也就不太吃多核了!!!

    因此 redis 必须要特别小心,某个操作占用时间长,就会阻塞其他命令的执行

一、redis 的线程安全问题?

假设有多个客户端,同时操作一个 redis 服务器

当前这两个客户端,也相当于“并发”的发起了上述的请求

此时就意味着是否服务器这边也会存在类似的线程安全问题呢

幸运的是,并不会

redis 服务器实际上是单线程模型,保证了当前收到的这多个请求是串行执行的!!!

多个请求同时到达 redis 服务器,也是要先在队列中排队

再等待 redis 服务器一个一个的取出里面的命令再执行

微观上讲,redis 服务器是串行/顺序执行这多个命令的

二、redis 虽然是单线程模型,为什么效率这么高呢,速度这么快呢(参照物是数据库)

1、redis 访问内存、数据库则是访问硬盘

2、redis 核心功能,比数据库的核心功能更简单

    数据库对于数据的插入、删除、查询等操作都有更复杂的功能支持,这样的功能势必要花费更多的开销

    比如,针对插入、删除,数据库中的各种约束,都会使数据库做额外的工作

3、单线程模型,避免了一些不必要的线程竞争开销

    redis 每个基本操作,都是短平快的,就是简单操作一下内存数据,不是什么特别消耗 cpu 的操作,就算搞多个线程,也提升不大

4、处理网络IO的时候,使用了 epoll 这样的 IO 多路复用机制

目录
相关文章
|
4月前
|
NoSQL Redis
Redis的单线程和高性能
Redis 的单线程主要是指 Redis 的网络 I0 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。 但Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。
25 0
|
5月前
|
NoSQL 关系型数据库 MySQL
Redis -- 单线程模型
Redis -- 单线程模型
59 1
|
5月前
|
缓存 NoSQL Redis
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?-- Redis多线程
【5月更文挑战第21天】Redis启用多线程后,主线程负责接收事件和命令执行,IO线程处理读写数据。请求处理流程中,主线程接收客户端请求,IO线程读取并解析命令,主线程执行后写回响应。业界普遍认为,除非必要,否则不建议启用多线程模式,因单线程性能已能满足多数需求。公司实际场景中,启用多线程使QPS提升约50%,或选择使用Redis Cluster以提升性能和可用性。
48 0
|
5月前
|
存储 消息中间件 缓存
Redis是否为单线程?
【2月更文挑战第6天】
64 1
Redis是否为单线程?
|
11月前
|
存储 移动开发 缓存
单线程 Redis 如此快的 4 个原因
为什么 Redis 单线程设计会带来如此高的性能?如果利用多个线程并发处理请求不是更好吗? 在本文中,我们将探讨使 Redis 成为快速高效的数据存储的设计选择。
365 2
|
11月前
|
NoSQL 算法 安全
Redis为什么是单线程的
Redis为什么是单线程的
|
12月前
|
NoSQL Redis
场景应用:Redis 单线程模型
场景应用:Redis 单线程模型
|
NoSQL Redis
Redis 是单线程的,为什么那么快
Redis 是单线程的,为什么那么快
56 1
|
缓存 NoSQL Redis
Redis 6.0多线程模型比单线程优化在哪里了
Redis 6.0多线程模型比单线程优化在哪里了
198 0
|
NoSQL 程序员 Linux
Redis是单线程还是多线程,为什么效率这么高?
Redis是单线程还是多线程?这个问题,把一个5年开发经验的程序员给问懵了。可能很多小伙伴平时都听说过,Redis就是单线程的。但是我们学习Redis命令的时候,有经常有设置异步,比如bgsave命令,它的作用是在后台异步持久化数据到磁盘,那既然是异步,肯定需要由线程来完成。
372 0