You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.2 KiB
3.2 KiB
Subject
Introduction:收纳专题相关的知识总结!
[TOC]
Redis
线程模型
Redis内部使用文件事件处理器File Event Handler,这个文件事件处理器是单线程的所以Redis才叫做单线程的模型。它采用I/O多路复用机制同时监听多个Socket,将产生事件的Socket压入到内存队列中,事件分派器根据Socket上的事件类型来选择对应的事件处理器来进行处理。文件事件处理器包含5个部分:
- 多个Socket
- I/O多路复用程序
- Scocket队列
- 文件事件分派器
- 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)
客户端与redis的一次通信过程:
-
请求类型1:
客户端发起建立连接的请求- 服务端会产生一个AE_READABLE事件,IO多路复用程序接收到server socket事件后,将该socket压入队列中
- 文件事件分派器从队列中获取socket,交给连接应答处理器,创建一个可以和客户端交流的socket01
- 将socket01的AE_READABLE事件与命令请求处理器关联
-
请求类型2:
客户端发起set key value请求- socket01产生AE_READABLE事件,socket01压入队列
- 将获取到的socket01与命令请求处理器关联
- 命令请求处理器读取socket01中的key value,并在内存中完成对应的设置
- 将socket01的AE_WRITABLE事件与命令回复处理器关联
-
请求类型3:
服务端返回结果- Redis中的socket01会产生一个AE_WRITABLE事件,压入到队列中
- 将获取到的socket01与命令回复处理器关联
- 回复处理器对socket01输入操作结果,如ok。之后解除socket01的AE_WRITABLE事件与命令回复处理器的关联
效率高
纯内存操作:数据存放在内存中,内存的响应时间大约是100纳秒,这是Redis每秒万亿级别访问的重要基础非阻塞的I/O多路复用机制:Redis采用epoll做为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接,读写,关闭都转换为了时间,不在I/O上浪费过多的时间C语言实现:距离操作系统更近,执行速度会更快单线程避免切换开销:单线程避免了多线程上下文切换的时间开销,预防了多线程可能产生的竞争问题
数据结构
热点数据
双写一致性
如何保证缓存和数据库的双写一致性?
