Redis介绍
官网的Redis介绍:
Redis是基于内存的存储系统,可以用作数据库、缓存、消息中间件。Redis提供了strings, hashes, lists, sets, sorted sets、bitmaps, hyperloglogs, geo等多种对象和数据结构。
Redis内置了复制、lua脚本、LRU驱动、事务和不同级别的磁盘持久化功能,并且通过哨兵Sentinel和Redis Cluster集群保证Redis高可用。
Redis线程模型
Redis服务采用类似Reactor的方式实现,每一个网络请求对应一个文件描述符FD。I/O多路复用模块同时监听多个FD,当有accept、read、write、close等文件事件产生时,IO多路复用程序会先激活FD对应事件放在事件队列中,由文件事件处理器调用对应回调函数进行处理,最后返回结果。
- 采用I/O多路复用同时监听多个socket,根据socket当前执行的事件为socket选择对应的事件处理器;
- 当被监听的socket准备执行
accept
、read
、write
、close
等操作时,I/O多路复用程序会将所有产生事件的socket放入队列,并且以有序的方式向文件事件分派器传送socket; - 文件事件处理器根据I/O多路复用传来的scoket事件类型调用对应处理器处理事件;
- 文件事件处理器有命令请求处理器、命令回复处理器、连接应答处理器等,处理完成之后将结果返回。
所以用Redis的单线程模型主要是指网络IO事件处理和键值对读写是由一个线程完成,其他像持久化、异步删除等操作都是额外线程完成的。
Redis为什么使用单线程模型还这么快?
1、为什么采用单线程模型
- 多线程 != 快。当系统中存在多线程访问资源时,就需要类似加锁机制保证共享资源正确性,这就带来了额外开销;
- 多线程频繁的上下文切换和竞争会带来额外的资源消耗;
- Redis是基于内存操作,CPU不是主要问题,主要是在网络IO会比较耗费时间。所以使用单线程足够处理百万命令。
2、为什么单线程模型这么快
- 纯内存操作;Redis是基于内存操作的ÿ