说一下Redis为什么快
目录
概述
根本原因
拓展
Redis 的持久化机制
小结
概述
概述:Redis 之所以能够实现超高吞吐量和低延迟,核心是 Redis 是基于内存存储的、单线程模型避免多线程中上下文切换和锁开销、IO 多路复用高效处理海量并发连接,这三者协同。再搭配 Redis 中多种高效的数据结构(如,字符串、列表、跳表、压缩列表、哈希表等)、底层实现(包含内存分配、网络优化等),以及 Redis 6.0 后多线程 IO 对网络读写的补充优化(不改变单线程核心,命令执行仍是单线程),从存储、计算、网络全链路最大程度减少开销,最终达成高性能表现。
根本原因
Redis 基于内存存储,纯内存操作,规避 磁盘 IO 瓶颈。
- 内存 IO 延迟是纳米级(≈10-9 秒 ),磁盘 IO 是毫秒级(≈10-3 秒 ),两者差距达 10 万倍。
- 仅再持久化(RDB/AOF)时异步写入磁盘,完全不会阻塞主线程的读写操作。
- MySQL 等数据库:即使数据库有缓存,但核心数据仍然需要磁盘交互,磁盘 IO 始终是性能上限,而 Redis 避免了磁盘 IO 带来的问题。
拓展
Redis 的持久化机制
简述:
- AOF 日志:AOF 日志是存储 Redis 所有写操作的日志文件,Redis 宕机重启后会重新执行 AOF 日志文件中的所有命令。
- RDB 快照:RDB 快照原理就是在某一时刻,将内存中的所有数据生成的一份二进制文件(.rdb 文件)并写入到磁盘中。
- 选择:生产环境中通常是 RDB + AOF 结合使用,用 AOF 保证数据一致性,减少数据丢失;用 RDB 做全量备份,快速恢复、数据备份;
- 对比:
| 对比 | RDB | AOF |
| 核心原理 | 定时生成内存全量数据的二进制快照 | 实时记录所有写操作命令,追加到文件 |
| 数据一致性 | 低,丢失最后一次快照到宕机前的所有数据 | 高(最多丢失 1 秒 / 0 数据) |
| 持久化文件体积 | 小(二进制压缩,无冗余数据) | 大(文本命令,含重复操作,需重写优化) |
| 服务启动加载速度 | 快(直接加载二进制数据到内存) | 慢(需重新执行所有命令还原数据) |
| 数据恢复优先级 | 低(Redis 启动时优先加载 AOF) | 高(AOF 存在时优先加载,数据更完整) |
| 适用场景 | 全量备份、灾备、性能优先、数据可容忍丢失场景 | 金融、电商等数据安全性优先,需减少数据丢失的场景 |
| 文件可读性 | 差(二进制文件,无法直接查看) | 好(文本文件,可直接查看 / 编辑命令) |
小结
Redis 凭借内存存储、单线程模型、IO 多路复用三大核心支柱,叠加高效数据结构、底层优化及 Redis 6.0 多线程 IO 补充,从存储、计算、网络全链路压缩开销,最终实现超高吞吐量与低延迟的高性能表现。持久化层面,AOF 日志以实时写命令记录保障数据一致性,RDB 快照以定时全量二进制备份支撑快速恢复,生产环境通过 “RDB+AOF” 组合,既规避数据丢失风险,又兼顾备份与恢复效率,完美平衡了高性能与数据安全性。
