美文网首页
20201112-Redis单/多线程模式

20201112-Redis单/多线程模式

作者: 爱钓鱼的码农 | 来源:发表于2020-11-17 14:06 被阅读0次

    Redis单线程理解

    Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。
    但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。
    Redis 单线程是指它对网络 IO 和数据读写的操作采用了一个线程,而采用单线程的一个核心原因是避免多线程开发的并发控制问题。单线程的 Redis 也能获得 高性能,跟多路复用的 IO 模型密切相关,因为这避免了accept() 和 send()/recv() 潜在的网络IO操作阻塞点。

    Redis快的原因

    1、Redis 的大部分操作在内存上完成,再加上它采用了高效的数据结构,例如哈希 表和跳表,这是它实现高性能的一个重要原因。
    2、Redis 采用了多路复用机制,使其在网络 IO 操作中能并发处理大量的客户端请求,实现高吞吐率。

    Redis的网络IO多路复用机制

    基于多路复用的Redis高性能IO模型.png

    上图就是基于多路复用的Redis IO模型。 Redis 网络框架调用 epoll 机制,让内核监听这些套接字。此时Redis 线程不会阻塞在某一个特定的监听或已连接套接字上,也就是说,不会阻塞在某一个特定的客户端请求处理 上。正因为此Redis 可以同时和多个客户端连接并处理请求,从而提升并发性。
    为了在请求到达时能通知到 Redis 线程,select/epoll 提供了基于事件的回调机制,即针 对不同事件的发生,调用相应的处理函数。
    这些事件会被放进一个事件队列,Redis 单线程对该事件队列不断进行处理。这样一来, Redis 无需一直轮询是否有请求实际发生,这就可以避免造成 CPU 资源浪费。同时, Redis 在对事件队列中的事件进行处理时,会调用相应的处理函数,这就实现了基于事件 的回调。因为 Redis 一直在对事件队列进行处理,所以能及时响应客户端请求,提升 Redis 的响应性能。

    IO多路复用机制

    Redis单/多线程对比

    2020 年 5 月,Redis 6.0 的稳定版发布了。

    多线程模型和IO模型有什么关联?
    会引入复杂的并发控制问题吗?
    会给 Redis 6.0 带来多大提升?

    相关文章

      网友评论

          本文标题:20201112-Redis单/多线程模式

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