Redis深入应用-原理篇
2020-09-11 本文已影响0人
美雨知春
- 线程IO模型
redis是个单线程程序。多路复用,用select事件轮询,select轮询可能开发过串口接口的同学会很清楚。
read_events,write_events = select(read_fs,write_fs,timeout)
for event in read_events:
handle_read(event.fd)
for event in write_events:
handle_write(event.fd)
handle_others() # 处理其它事情,如定时任务等
- 通信协议
RESP是Redis序列化协议,有5种最小的单元类型,单元结束时统一加上\r\n - 持久化
Redis的数据全部在内存中,但是数据也是持久化的,有两种持久化方式:AOF和快照(COW)
AOF:是对指令进行日志存储
COW:copy onWrite,子进程直接拷贝内存数据
混合持久化:快照+指令恢复 - Redis的消息交互-管道
读写数据存储的缓存中,顺序读写,不需要一个请求对应一个回复。这也是管道的原理,这一点跟淳口通信非常相似 - 事务和原子性
redis支持事务和原子性的 - PubSub,消息订阅,同时也支持模式订阅
支持一个生产者,多个消费者模型
模式订阅是指对消息类型进行订阅 - 内存管理
内存回收,并不是总将空闲内存立即归还给操作系统
内存分配:redis自己并不直接分配内存,而是把内存分配丢给第三方进行管理:jemalloc