Redis

关注公众号 jb51net

关闭
首页 > 数据库 > Redis > Redis 底层运行机制

Redis 底层运行机制与原理流程分析

作者:L.EscaRC

Redis是一个基于内存的键值存储系统,采用单线程事件驱动架构和epoll/kqueue实现I/O多路复用,本文给大家介绍Redis 底层运行机制与原理流程分析,感兴趣的朋友一起看看吧

一、核心架构:事件驱动与单线程模型

Redis 采用 单线程事件驱动架构,通过 epoll/kqueue 实现 I/O 多路复用。其核心事件循环(aeEventLoop)持续监听两类事件:

  1. 文件事件:Socket 可读/可写状态(客户端请求/响应)
  2. 时间事件:定时任务(如过期键清理、持久化触发)

工作流程:主线程通过 epoll_wait() 等系统调用获取就绪事件 → 调用对应处理器(如 readQueryFromClient 解析命令)→ 执行命令 → 返回结果。这种设计避免了多线程锁竞争,但需确保单线程操作高效。

二、内存数据结构与动态编码

Redis 通过 redisObject 结构统一管理数据,其字段包括:

动态编码优化策略:

数据类型编码方式触发条件性能特点
Stringint/embstr/raw整数 → int;≤44字节 → embstr;大对象 → rawembstr 减少内存分配次数
ListquicklistRedis 3.2+ 替代 ziplist/linkedlist,由 ziplist 节点+双向链表组成平衡内存与操作效率
Hashziplist/hashtable元素少且值小 → ziplist;超阈值 → hashtable节省小对象内存
Setintset/hashtable全为整数 → intset;否则 → hashtable整数集合压缩存储
ZSetziplist/skiplist元素少且分数小 → ziplist;否则 → skiplist跳表支持快速范围查询
Streamradix tree + listpack基数树索引消息 ID,listpack 存储消息内容高效支持消息遍历

编码转换:当数据量超过阈值(如 ziplist 大小 > hash-max-ziplist-entries)时自动切换编码。

三、内存管理与碎片整理

1. 内存分配器

默认使用 jemalloc,其优势:

2. 内存淘汰策略

当达到 maxmemory 限制时触发:

3. 主动碎片整理(Active Defrag)

四、持久化机制:RDB 与 AOF

1. RDB(快照持久化)

2. AOF(日志持久化)

性能对比:

特性RDBAOF
文件大小小(二进制)大(文本命令)
恢复速度
数据安全可能丢失快照间数据最多丢失 1 秒数据

五、复制与集群架构

1. 主从复制流程

2. 集群(Cluster)原理

六、高级特性实现

1. Lua 脚本引擎

2. I/O 多线程(Redis 6.0+)

3. 模块系统

总结

Redis 的底层运行机制是一个精心设计的系统工程:

到此这篇关于Redis 底层运行机制与原理浅析的文章就介绍到这了,更多相关Redis 底层运行机制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文