Skip to content

Redis 基础与持久化

Redis 的优缺点与速度来源

Redis 是内存数据结构服务器,常用于缓存、计数器、排行榜、分布式协调、流式消息等。

优势:内存访问延迟低;提供丰富数据结构和原子命令;支持过期、事务、Lua 脚本、复制、哨兵和集群;单线程命令执行模型使单命令原子语义直观。

代价:数据主要驻内存,容量和成本受限;持久化与复制是异步/可配置的,故障场景要评估数据丢失窗口;大 key、慢命令和热 key 会阻塞事件循环或形成热点;不应把 Redis 当作默认的关系数据库替代品。

它快的主要原因是内存数据访问、高效编码/数据结构、事件驱动 I/O 与较少锁竞争,而不是“单线程本身一定比多线程快”。

常用数据类型

类型用途示例
String缓存对象、计数器、分布式锁标记
Hash对象的字段-值映射
List双端队列、简单消息队列
Set去重、共同好友/标签集合运算
ZSet排行榜、按分数范围查询
Bitmap签到、在线位图等布尔状态
HyperLogLog海量数据去重计数的近似基数统计
GEO地理坐标、附近位置查询
Stream可消费组读取的追加式消息流

具体内部编码会随元素数量和长度变化,例如小型集合可能采用紧凑编码;不宜只按抽象类型推断内存成本。

单线程还是多线程?

Redis 的命令执行(数据读写与大多数核心逻辑)以单线程事件循环为主,因此同一实例内普通命令按顺序执行,避免了命令执行时的数据竞争。后台持久化、删除等任务可由额外线程/子进程完成。

Redis 6 起可配置多线程处理部分网络 I/O,但命令执行的核心模型仍以单线程为主。高性能的前提是命令足够短:避免 O(N) 大命令、超大 value/collection、阻塞 Lua 脚本和同步慢操作。

持久化机制

方式原理优点代价
RDB 快照在某时刻把内存数据写成紧凑二进制快照恢复快、文件紧凑两次快照之间的数据可能丢失
AOF追加记录写命令,重启时重放可按 fsync 策略缩小丢失窗口文件更大、恢复通常较慢,需要重写
混合持久化AOF 重写文件前段使用 RDB,后段保留增量命令兼顾恢复速度和数据完整性运维与配置需理解清楚

AOF 的 appendfsync always/everysec/no 在持久性和性能间取舍;everysec 常见,但异常断电仍可能丢失约一秒数据。持久化不是备份的完全替代,还需要副本、备份和恢复演练。

使用 Markdown 与 VitePress 构建