松鼠乐园 松鼠乐园
  • 注册
  • 登录
  • 首页
  • 快捷入口
    • Vue
    • Tensorflow
    • Springboot
    • 语言类
      • CSS
      • ES5
      • ES6
      • Go
      • Java
      • Javascript
    • 工具类
      • Git
      • 工具推荐
    • 服务器&运维
      • Centos
      • Docker
      • Linux
      • Mac
      • MySQL
      • Nginx
      • Redis
      • Windows
    • 资源类
      • 论文
      • 书籍推荐
      • 后端资源
      • 前端资源
      • html网页模板
      • 代码
    • 性能优化
    • 测试
  • 重大新闻
  • 人工智能
  • 开源项目
  • Vue2.0从零开始
  • 广场
首页 › Redis › Redis单线程架构

Redis单线程架构

迦娜王
3年前Redis
546 0 0

Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务。

引出单线程模型

开启三个redis-cli客户端同时执行命令:

1、客户端1设置一个字符串键值对:

Redis单线程架构

2、客户端2对counter自增操作:

Redis单线程架构

3、客户端3对counter自增操作:

Redis单线程架构

redis客户端与服务端的模型可以简化成图(如下图所示),每次客户端调用都经历了发送命令、执行命令和返回结果三个过程。

Redis单线程架构

其中第2步执行命令是重点。因为redis是单线程来处理命令的,所以一条命令从客户端到到服务端不会立刻被执行,所有命令都回进入到一个队列中,然后逐个执行。所以以上三个客户端的命令执行顺序是不确定的。

Redis单线程架构

但是可以确定的是绝对不会像下图所示有两条命令被同时执行:

Redis单线程架构

所以两条incr命令是无论怎么执行最终结果都是2,不会产生并发的问题,这就是单线程的基本模型。当然排队机制不想我写的这么简单,redis使用了I/O多路复用技术来解决I/O的问题,感兴趣的可以深入研究下。

为什么单线程还这么快

现在的CPU都是多线程了,可为什么redis使用了单线程速度还这么快。

一般来说,单线程的处理能力要比多线程差,这是毋庸置疑的。比如有10000斤货物,每辆车运载能力每次200斤,那么就要50次来完成,但是如果有50辆车,只要遵循一定的“队列机制”,就可以一次完成,哪为什么redis使用单线程模型还会达到每秒万级的处理能力,大致分为如下三点:

1、redis是基于内存来存储的,然而内存的读取/响应市场大约为100纳秒,这一点也就是redis能打到每秒万级的重要基础。

2、非阻塞I/O,redis使用epoll作为I/O多路复用技术的实现,再加上redis的自身的时间处理模型将epoll中的连接,读写,关闭都转换为事件,不在网络I/O上浪费时间。如下图所示。

Redis单线程架构

3、单线程避免了线程切换和竟态产生的消耗。

单线程带来的好处及问题

单线程带来的好处:

1、单线程可以简化数据结构和算法的实现

2、单线程避免了线程切换和竟态产生的消耗,对于服务端来说,锁和线程切换通常是性能杀手。

单线程的问题:对于每个命令的执行时间是有要求的。(如果某个命令执行时间过长,就会造成其他命令的阻塞,对于redis这种高性能服务来说是致命的。所以redis是面向快速执行场景的数据库)

0
Linux 内核到底是什么样子
上一篇
深入浅出Nginx
下一篇
评论 (0)

请登录以参与评论。

现在登录
聚合文章
Servicios profesionales Organizaciones
1年前
在Gitee收获近 5k Star,更新后的Vue版RuoYi有哪些新变化?
1年前
vue3.x reactive、effect、computed、watch依赖关系及实现原理
1年前
Vue 3 新特性:在 Composition API 中使用 CSS Modules
1年前
标签
AI AI项目 css docker Drone Elaticsearch es5 es6 Geometry Go gru java Javascript jenkins lstm mysql mysql优化 mysql地理位置索引 mysql索引 mysql规范 mysql设计 mysql配置文件 mysql面试题 mysql高可用 nginx Redis redis性能 rnn SpringBoot Tensorflow tensorflow2.0 UI设计 vue vue3.0 vue原理 whistle ZooKeeper 开源项目 抓包工具 日志输出 机器学习 深度学习 神经网络 论文 面试题
相关文章
代码实测:给redis中的key取一个正确的名字多么重要
Redis从入门到精通,至少要看看这篇
用Redis做实时订阅推送的
KeyDB——据说是比Redis快5倍的中间件,为啥这么快?
松鼠乐园

资源整合,创造价值

小伙伴
墨魇博客 无同创意
目录
重大新闻 Centos CSS Docker ES5 ES6 Go Java Javascript Linux Mac MySQL Nginx Redis Springboot Tensorflow Vue Vue2.x从零开始 Windows 书籍推荐 人工智能 前端资源 后端资源 壁纸 开源项目 测试 论文
Copyright © 2018-2022 松鼠乐园. Designed by nicetheme. 浙ICP备15039601号-4
  • 重大新闻
  • Centos
  • CSS
  • Docker
  • ES5
  • ES6
  • Go
  • Java
  • Javascript
  • Linux
  • Mac
  • MySQL
  • Nginx
  • Redis
  • Springboot
  • Tensorflow
  • Vue
  • Vue2.x从零开始
  • Windows
  • 书籍推荐
  • 人工智能
  • 前端资源
  • 后端资源
  • 壁纸
  • 开源项目
  • 测试
  • 论文
热门搜索
  • jetson nano
  • vue
  • java
  • mysql
  • 人工智能
  • 人脸识别
迦娜王
坚持才有希望
1224 文章
35 评论
242 喜欢
  • 0
  • 0
  • Top