本文共 1549 字,大约阅读时间需要 5 分钟。
作为内存数据库,Redis的数据存储依赖于服务器进程的持续运行。一旦Redis服务器进程退出或运行Redis服务器的计算机停机,Redis服务器中的数据将丢失。为了避免数据丢失,Redis提供了两种持久化机制:RDB和AOF。以下从基本原理到实际应用详细介绍两种持久化方式。
Redis将数据存储在内存中,内存数据一旦服务器进程退出或计算机停机,数据将丢失。因此,持久化机制的作用是记录数据在内存中的状态,确保在数据丢失时能够快速恢复。
RDB持久化通过将Redis数据库在特定时间点的状态保存到文件中实现。这种方式被称为快照持久化,因为它记录的是数据的静态副本。
Redis提供了两种命令创建RDB文件:SAVE和BGSAVE。
SAVE命令:会阻塞Redis服务器进程,直到RDB文件生成完毕。在此期间,服务器无法处理任何命令请求。BGSAVE命令:通过子进程生成RDB文件,服务器进程继续处理命令请求,避免了对业务逻辑的影响。默认配置下,Redis服务器在满足以下任一条件时执行BGSAVE:
生成的RDB文件路径由Redis配置文件确定,默认文件名为redis_XXXXXX.rdb。
Redis在启动时会自动加载RDB文件进行数据恢复。默认情况下,Redis启用AOF持久化时会优先使用AOF文件还原数据;否则,使用RDB文件还原数据。
AOF持久化通过记录Redis服务器执行的所有写命令实现数据持久化。这种方式被称为日志持久化,因为它记录的是操作日志。
AOF文件包含Redis服务器执行的写命令日志,默认文件名为appendonly.aof。文件内容以二进制格式存储,支持压缩。
AOF持久化默认启用,所有写操作都会追加到AOF缓冲区,根据appendfsync选项选择何时同步到磁盘:
Redis启动时会自动加载AOF文件还原数据。AOF文件的优先级高于RDB文件。
随着数据不断修改,AOF文件体积不断增大。Redis提供了AOF重写功能,通过读取当前数据库状态,减少冗余命令,生成新的AOF文件。重写过程由子进程执行,不影响服务器主进程。
AOF重写可以通过以下方式触发:
BGREWRITEAOF命令auto-aof-rewrite-percentage和auto-aof-rewrite-min-size,自动触发重写(默认值为100%和64MB)| 对比项 | RDB | AOF |
|---|---|---|
| 实现方式 | 快照(数据副本) | 日志(操作记录) |
| 文件体积 | 较小 | 较大(支持压缩) |
| 安全性 | 最差(可能丢失数据) | 最佳(最多丢失1秒数据) |
| 优先级 | 否 | 是 |
| 适用场景 | 灾难恢复(RDB优化) | 数据一致性(AOF优化) |
选择RDB还是AOF取决于具体需求:
两种持久化方式可以结合使用,根据实际需求进行配置。
转载地址:http://jmfh.baihongyu.com/