把数据写进 Redis 后,查询一切正常。
可服务器一重启,数据却没了。
原因很简单:Redis 的数据主要存储在内存中。
内存读写很快,但断电、关机或 Redis 重启后,里面的数据可能会丢失。
所以,Redis 需要把内存中的数据保存到磁盘。这个过程,就叫作持久化。
Redis 常用的持久化方式有两种:RDB 和 AOF。
一、RDB:定期给数据拍照
RDB 就像给 Redis 数据定期拍快照。
例如每小时持久化一次,在晚上 8 点保存了一次,8 点到 8 点 10 分写入的新数据还没保存,服务器就断电了。重启后只能恢复到 8 点,之后的数据会丢失。
因此,RDB 的特点是:
定期保存某一时刻的完整数据。
优点是文件较小、恢复较快;缺点是两次快照之间的数据可能丢失。
RDB 保存的是某一个时间点的数据状态。
二、AOF:把每次操作记下来
AOF 可以理解为一本操作账本。
Redis 每执行一次写操作,就把这次操作记录下来。
例如:
text
设置 name = Redis
将 count 加 1
删除 user
Redis 重启后,会按照记录重新执行这些操作,从而恢复数据。
相比 RDB,AOF 通常能保留更多最新数据,但文件也可能更大。
AOF 记录的是数据发生过的变化。
三、RDB 和 AOF 有什么区别?
| 对比项 | RDB | AOF |
|---|---|---|
| 通俗理解 | 定期拍照 | 持续记账 |
| 保存内容 | 某一时刻的数据 | 每次写操作 |
| 数据丢失 | 可能丢失两次快照之间的数据 | 通常丢失的数据更少 |
| 文件大小 | 通常较小 | 通常较大 |
| 恢复方式 | 加载数据快照 | 重新执行写操作 |
总结
Redis 使用持久化,是为了在重启后恢复数据。
RDB 像拍照,保存数据状态;AOF 像记账,记录数据变化。