• 文件事件处理器(file event handler)
  1. Redis 基于 Reactor 模式开发了自己的网络事件处理器: 这个处理器被称为文件事件处理器(file event handler)
  2. 文件事件处理器使用 I/O 多路复用(multiplexing)程序来同时监听多个套接字, 并根据套接字目前执行的任务来为套接字关联不同的事件处理器。
  3. 当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关闭(close)等操作时, 与操作相对应的文件事件就会产生, 这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件。
  4. 文件事件处理器以单线程方式运行, 但通过使用 I/O 多路复用程序来监听多个套接字, 文件事件处理器既实现了高性能的网络通信模型, 又可以很好地与 redis 服务器中其他同样以单线程方式运行的模块进行对接, 这保持了 Redis 内部单线程设计的简单性。
  • Redis线程模型

Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程。其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端的命令不会立刻执行,所有的命令都会进入一个队列中,然后逐个被执行。并且多个客户端发送的命令的执行顺序是不确定的。但是可以确定的是不会有两条命令被同时执行,不会产生并发问题,这就是Redis的单线程基本模型。

  • Redis是单线程模型为什么效率还这么高?
  1. 纯内存访问:数据存放在内存中,内存的响应时间大约是100纳秒,这是Redis每秒万亿级别访问的重要基础。
  2. 非阻塞I/O:Redis采用epoll做为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接,读写,关闭都转换为了时间,不在I/O上浪费过多的时间。
  3. 单线程避免了线程切换和竞态产生的消耗。
  4. Redis采用单线程模型,每条命令执行如果占用大量时间,会造成其他线程阻塞,对于Redis这种高性能服务是致命的,所以Redis是面向高速执行的数据库
  • IO多路复用技术
  1. 参考:https://www.cnblogs.com/wlwl/p/10293057.html

举个例子,模拟一个tcp服务器处理30个客户socket。

假设你是一个老师,让30个学生解答一道题目,然后检查学生做的是否正确,你有下面几个选择:

  1. 第一种选择:按顺序逐个检查,先检查A,然后是B,之后是C、D。。。这中间如果有一个学生卡主,全班都会被耽误。这种模式就好比,你用循环挨个处理socket,根本不具有并发能力。
  2. 第二种选择:你创建30个分身,每个分身检查一个学生的答案是否正确。 这种类似于为每一个用户创建一个进程或者线程处理连接。
  3. 第三种选择,你站在讲台上等,谁解答完谁举手。这时C、D举手,表示他们解答问题完毕,你下去依次检查C、D的答案,然后继续回到讲台上等。此时E、A又举手,然后去处理E和A。。。 这种就是IO复用模型(Linux下的select、poll和epoll就是干这个的。将用户socket对应的fd注册进epoll,然后epoll帮你监听哪些socket上有消息到达,这样就避免了大量的无用操作。此时的socket应该采用非阻塞模式。这样,整个过程只在调用select、poll、epoll这些调用的时候才会阻塞,收发客户消息是不会阻塞的,整个进程或者线程就被充分利用起来,这就是事件驱动,所谓的reactor模式。)

Redis 线程模型相关推荐

  1. Redis线程模型的前世今生

    作者:vivo互联网服务器团队-Wang Shaodong 一.概述 众所周知,Redis是一个高性能的数据存储框架,在高并发的系统设计中,Redis也是一个比较关键的组件,是我们提升系统性能的一大利 ...

  2. java基础巩固-宇宙第一AiYWM:为了维持生计,Redis基础Part6(Redis的应用场景、Redis是单线程的速度还快、Redis线程模型:Reactor模式、事件、发布订阅、管道)~整起

    PART1-1:为什么Redis是单线程的 Redis单线程是指: Redis的网络IO和键值对读写是由一个线程来完成的.这也是 Redis 对外提供键值存储服务的主要流程.Redis的其他功能,比如 ...

  3. Redis使用场景、Redis线程模型、Redis持久化 - 公开课笔记

    redis和数据库怎么写同步? 分布式如何达到一致性? CAP 一致性.可用性.性能 HA:高可用,不存在没有任何时延.没有任何波动的高可用 容忍度只要达标,就可以.不要为了技术而技术->你会否 ...

  4. 简谈Redis的线程模型

    Redis线程模型 Redis真的是单线程的吗 ? 为什么说Redis单线程速度这么快? IO多路复用 Redis真的是单线程的吗 ? Redis的单线程主要是指处理网络IO请求和键值对的读写是单线程 ...

  5. 性能追击:万字长文30+图揭秘8大主流服务器程序线程模型 | Node.js,Apache,Nginx,Netty,Redis,Tomcat,MySQL,Zuul

    本文为<高性能网络编程游记>的第六篇"性能追击:万字长文30+图揭秘8大主流服务器程序线程模型". 最近拍的照片比较少,不知道配什么图好,于是自己画了一个,凑合着用,让 ...

  6. Redis_15_Redis线程模型与事件

    文章目录 一.前言 二.文件事件 三.时间事件 四.事件的调度与执行(文件事件+时间事件) 五.尾声 一.前言 Redis服务器是一个事件驱动程序,服务器需要处理以下两类事件(文件事件+时间事件): ...

  7. 性能追击:30+图详解8大主流服务器程序线程模型展示

    看大佬如何用30+图片揭秘8大主流服务器程序线程模型: 最近拍的照片比较少,不知道配什么图好,于是自己画了一个,凑合着用,让大家见笑了. 本文我们来探索一下主流的各种应用服务器的网络处理模型,看看大家 ...

  8. 性能追击:万字长文 30+ 图 8 大主流服务器程序线程模型展示

    看大佬如何用 30+图片揭秘 8 大主流服务器程序线程模型: 最近拍的照片比较少,不知道配什么图好,于是自己画了一个,凑合着用,让大家见笑了. 本文我们来探索一下主流的各种应用服务器的网络处理模型,看 ...

  9. Redis详解(redis线程模式、数据持久化机制、主从复制、缓存穿透、缓存击穿等)

    一.redis概述 redis主要用作数据库.缓存和消息中间件, 支持多种语言, 是基于内存的key-value数据结构存储系统. redis支持数据的持久化, 可以将内存中的数据保存在磁盘中, 重启 ...

最新文章

  1. 关于批量插入数据之我见(100万级别的数据,mysql) (转)
  2. 光纤收发器的AB端可随便连接吗?
  3. 知识点:Mysql 数据库索引优化实战(4)
  4. 服务端设置忽略更新_react服务端渲染: cookie如何透传给后端,后端如何设置cookie...
  5. pyplot.annatate
  6. C++中派生类的构造函数
  7. 系统性能优化- Session丢失
  8. WebRTC SDP 详解和剖析
  9. LaTeX符号语法总结
  10. Hello CSDN blog
  11. Liferay门户应用前景分析
  12. 数据库管理员、系统分析员、数据库设计人员,应用程序员的职责是什么?
  13. 用鲁棒学习提升无监督图像聚类
  14. redis哨兵模式(docker)
  15. 小白也能读懂的 ZigBee 3.0 简介
  16. 美国主流网站所使用的JavaScript框架
  17. 不需要网络的调频收音机_五六十年代不需要电的收音机
  18. Centos7下RTL8188eu USB无线网卡(TP WN725N) 驱动源码下载和编译步骤
  19. 小米电视/盒子去除广告
  20. Genesis创意漫画之【质押与借贷】

热门文章

  1. 标签类目体系(面向业务的数据资产设计方法论)-读书笔记8(完结)
  2. win10用OBS录制视频出现视频文件音画不同步的情况处理
  3. 基于恩智浦MK60DN512Z系列单片机的智能模型车主程序与子程序集
  4. [LCT刷题][连通性维护] P3950 部落冲突
  5. 如何使用EXCEL批量检查地址格式?
  6. GIVE 添加 bigWig 文件
  7. 【WCN6856】WiFi 5G 接口启动失败问题解决
  8. 数理统计复习:统计量及其分布(3)充分统计量
  9. vue3采用xlsx库实现上传excel文件,前端解析展示数据(日期转换问题解决)
  10. 子网掩码是干什么用的?