3.Redis 单线程模型

redis 单线程模型

redis 只使用一个线程来处理所有的命令请求,并不是说一个 redis 服务器进程内部真的就只有一个线程,其实也有多个线程,多个线程是再处理网络 IO。

那么在多线程中,针对类似于这样的场景两个线程尝试同时对一个 变量 进行自增表面上看是自增两次,实际上可能只只增了一次。

其中比如下面这种场景下:

此时当前这个两个redis客户端,也相当于"并发"的发起了上述的请求

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

幸运的是,并不会发生这种问题,redis 服务器实际上是单线程模型,保证了当前收到的这多个请求是串行执行的!!!

redis 虽然是单线程模型,为啥效率这么高呢?

  1. redis 直接访问内存,而如mysql等数据库则是访问硬盘。
  2. redis 核心功能,比数据库的核心功能更加简单
    数据库对于数据的插入删除查询都有更复杂的功能支持,这样的功能势必要花费更多的开销。比如,针对插入删除,数据库中的各种约束,都会使数据库做额外的工作。
  3. redis 单线程模型,避免了一些不必要的线程竞争开销
    redis 每个基本操作,都是短平快的,就是操作内存数据,不是什么特别消耗cpu的操作,就算搞多线程也提升不大
  4. 处理网络 IO 的时候,使用了 epoll 这样的 IO 多路复用机制~
相关推荐
jnrjian9 分钟前
预估 PURGE DBA_RECYCLEBIN 执行时间 v$SESSION_LONGOPS 6 秒限制
数据库·dba
尽兴-17 分钟前
Git 分支管理核心命令科普指南
数据库·git·分支管理·代码仓库
XDHCOM19 分钟前
Redis本地化实现策略与应用问题解析,如何配置Redis本地化,常见问题解决
数据库·redis·缓存
RDCJM21 分钟前
C#数据库操作系列---SqlSugar完结篇
网络·数据库·c#
小陈工21 分钟前
Python Web开发入门(一):虚拟环境与依赖管理,从零搭建纯净开发环境
开发语言·前端·数据库·git·python·docker·开源
jnrjian22 分钟前
crosscheck restore uncatalog archivelog 检查 恢复 归档日志
数据库·dba
霖霖总总24 分钟前
[Redis小技巧29]从 Setnx 到 Redlock:Redis 分布式锁的演进之路与生产级实践
数据库·redis·分布式
-ONLY-¥33 分钟前
MySQL备份恢复全攻略
数据库·oracle
一个天蝎座 白勺 程序猿42 分钟前
源网荷储实时互动需求下,时序数据库如何赋能新型电力系统?
数据库·时序数据库
zs宝来了1 小时前
Redis 数据结构底层实现:intset、ziplist、skiplist 深度剖析
数据结构·redis·源码解析·skiplist·ziplist·intset