Redis拷打第三讲
2026/5/15 2:40:33 网站建设 项目流程

9. Redis作为缓存,数据的持久化是怎么做的?

Redis是基于内存的数据库,为了防止Redis宕机后数据丢失,Redis提供了持久化机制。

Redis主要提供了两种持久化方式:

  1. RDB(Redis DataBase)
  2. AOF(Append Only File)

在Redis 4.0之后,还支持了混合持久化。


1. RDB

RDB本质上是一个数据快照文件,Redis会在某一个时间点,把当前内存中的所有数据生成一个.rdb文件并保存到磁盘中,当Redis宕机重启时,可以通过读取RDB文件来恢复数据。

RDB特点

优点
  • 文件体积小
  • 恢复速度快
  • 适合做全量备份
缺点
  • 两次快照之间的数据可能会丢失
  • fork子进程时,如果数据量很大,可能会出现短暂阻塞

常见触发方式

Redis可以通过配置自动触发RDB:

save 900 1 save 300 10 save 60 10000

含义:

  • 900秒内至少1次修改
  • 300秒内至少10次修改
  • 60秒内至少10000次修改

满足任意一个条件,就会触发一次RDB快照。


2. AOF

AOF的含义是追加文件,Redis每执行一次写命令,都会将该命令追加到AOF文件中,当Redis宕机恢复数据时,会重新执行AOF文件中的命令,从而恢复数据。

AOF特点

优点
  • 数据安全性更高
  • 数据丢失更少
  • 可读性较好
缺点
  • 文件体积更大
  • 数据恢复速度较慢
  • 长时间运行需要进行AOF重写

3. AOF刷盘策略

Redis提供了三种刷盘策略:

always

每执行一次写命令就立即刷盘。

优点:

  • 数据最安全

缺点:

  • 性能最差

everysec(默认)

每秒刷盘一次。

优点:

  • 性能和安全性平衡较好

缺点:

  • 最多可能丢失1秒数据

no

由操作系统决定什么时候刷盘。

优点:

  • 性能最好

缺点:

  • 数据安全性最低

4. 混合持久化(Redis 4.0)

Redis 4.0之后支持混合持久化:

  • 使用RDB保存全量数据
  • 使用AOF保存增量命令

这样既可以提高恢复速度,也能减少数据丢失。


10. RDB和AOF有什么区别?

RDB是一个快照文件。它是把redis内存存储的数据写到磁盘上。当redis实例宕机恢复数据的时候,可以从RDB的快照文件中恢复数据。AOF的含义是追加文件。当redis执行写命令的时候,都会存储到这个文件中。当redis实例宕机恢复数据的时候,会从这个文件中再次执行一遍命令来恢复数据。

11.这两种方式,哪种恢复的比较快呢?

如果只看恢复速度,RDB 是更快的。因为 RDB 是一个二进制快照文件,恢复时 Redis 可以直接把数据加载进内存,不需要逐条执行命令。而 AOF 是记录写命令的日志文件,恢复时需要重新执行所有写命令,所以数据量越大,恢复时间越长。
但是 AOF 的优势是数据安全性更高,因为它可以通过刷盘策略,比如每秒一次everysec,来尽量减少数据丢失。
在实际生产中,一般会结合使用 RDB 和 AOF:

  • RDB 负责快速恢复全量数据
  • AOF 负责补充最近的写操作,降低数据丢失风险

12. Redis的数据过期策略有哪些?

Redis 的过期删除策略主要有两个策略,但实际使用的是惰性删除 + 定期删除的组合策略
惰性删除,在设置该key过期时间后,我们不去管它,当访问这个 key 的时候,Redis 才会判断它是否过期。如果过期,就删除并返回空,如果没过期,就正常返回,优点是性能开销低 ,缺点是如果这个 key 一直不被访问,就会一直占用内存
定期删除,是 Redis 每隔一段时间,随机抽取一部分 key 进行过期检查和删除。定期清理的两种模式是:1) SLOW模式,是定时任务2) FAST模式,执行频率不固定,优点是可以减少内存堆积,缺点是CPU 开销太大
组合使用,因为只用一种策略都会有问题:只用惰性删除 → 内存可能长期堆积,只用定期删除 → CPU 开销太大。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询