美文网首页
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单/多线程模式

    Redis单线程理解 Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,...

  • Java多线程--并行模式与算法

    Java多线程--并行模式与算法 单例模式 虽然单例模式和并行没有直接关系,但是我们经常会在多线程中使用到单例。单...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • Unity3d游戏开发之-单例设计模式-多线程一

    单例模式3:多线程一

  • 单例模式

    单例模式介绍 把单例模式放到多线程基础这块,是因为单例和多线程有一点的关系。何为单例模式? 在它的核心结构中只包含...

  • 多线程(下)&GUI

    day25(多线程(下)&GUI) 1_多线程(单例设计模式)(掌握) 单例设计模式:保证类在内存中只有一个对象。...

  • iOS 多线程NSThread,GCD,NSOperation

    单例模式例子: https://github.com/XiaoRuiZuo/Singleton 多线程:多线程是为...

  • 单例模式

    单例模式 单例模式:用来保证一个对象只能被创建一次。 普通版 代码实现如下 同步锁单例 单例模式如果再多线程中使用...

  • Java单例模式

    单例模式有很多种模式,饿汉,懒汉模式。项目中的单例需要处理多线程,所以选择以下两种实现方式。 关于volatile...

  • 关于java静态内部类的思考

    前言 最近在看多线程,讲到单例模式安全问题的时候。提到了单例的第四种模式——InnerClass模式。里面提到这种...

网友评论

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

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