美文网首页
redis线程模型

redis线程模型

作者: laowangv2 | 来源:发表于2020-10-20 22:39 被阅读0次

Reactor模型

参考:https://juejin.im/post/6844903636422623240#heading-5

1.单线程的Reactor模型

参考:
http://redisbook.com/preview/event/file_event.html

2.redis4.0

新增了一些异步操作,使用多线程:

3.redis6.0

主线程select可读后加入线程组,阻塞等待读完,命令依旧单线程处理,写回也加入线程组。类似netty的workergroup,命令执行还是单线程
单线程模型主要问题时,IO需要主线程阻塞的完成,虽然不用等待IO就绪,但IO本身是阻塞操作,肯定并发越高,压力越大,多线程可以分摊IO操作的压力
参考:
https://www.modb.pro/db/27969
https://www.cnblogs.com/caohongchang/p/13285948.html

4.问答

  1. redis为什么快
    1. 基于内存
    2. 数据结构简单,单条指令不会阻塞太久
    3. 多路复用(event loop) 和 非阻塞IO (IO时都已经准备好了)
    4. 单线程模型,避免了多线程开销

事件

根据最快要到期的时间事件挂起一定时间,执行文件事件,执行时间事件(serverCron)

  • 文件事件
    套接字

  • 时间事件
    id + when + timeProc(处理器)

    • 定时事件
      多久后执行,一次。timeProc 返回 AE_NOMORE
    • 周期性事件
      每隔多久就执行一次。timeProc返回下次时间偏移量

    时间事件放到无序链表中,处理器定时遍历执行。但实际上也只有serverCron这一个事件,所以遍历也不会有什么性能问题。serverCron的工作:

    • 更新服务器统计信息
    • 清理过期键
    • 清理客户端连接
    • 尝试执行持久化
    • 主从同步
    • 集群同步

相关文章

网友评论

      本文标题:redis线程模型

      本文链接:https://www.haomeiwen.com/subject/offrmktx.html