Redis教程:持久化


Redis的持久化

在Redis中,实现持久化有两种方式:

  • RDB (Redis Database): 这种方式可以在指定的时间间隔将Redis中的数据集快照保存到数据库中。
  • AOF (Append Only File): 这种方式会将Redis收到的所有写操作保存到日志中,这样当Redis重新启动时就会从日志中读取这些数据。

当然,在Redis中,持久化是可选的,你可以完全禁用持久化,这样数据只是在内存中。

关于RDB和AOF这两种持久化方式,Redis官方推荐两个都开启。但需要性能同时对数据完整性要求不高(毕竟只是缓存)的时候可以选择RDB,需要数据完整性的时候可以选择AOF,但最好和RDB配合使用。

RDB

在Redis的配置文件中,默认情况下将会把数据保存到dump.rdb中 (dbfilename: dump.rdb)。

关于快照文件生成的时间间隔,在Redis配置文件中可以通过以下选项来设置:

save 300 100

代表默认保存快照文件的时间间隔为300秒,且至少有100个键值被保存时会触发这个操作。但需要注意,如果在300秒内有多于100个键值被更新,则只会对100个键值进行持久化,多出的键值要等到下次时才会被保存。这就导致了RDB的一个问题:最后一次持久化之后的数据可能丢失。因此对于数据完整性要求严格的应用,RDB的方式并不适合,应选择AOF方式。

Redis中有一个专门的子进程负责持久化,它会把数据保存到一个临时文件中,待持久化结束后用这个临时文件替代dump.rdb。

RDB的备份和恢复

在Docker中,默认的数据存储路径为:/data,如果不清楚数据存储到哪里,则以在命令行中运行config get dir来获取:

127.0.0.1:6379> config get dir
1) "dir"
2) "/data"

之后把dump.rdb复制到指定的位置进行备份。在恢复时需要:

  • 停止Redis
  • 将备份文件复制回数据目录
  • 启动Redis

AOF

AOF是Append Only File的缩写,代表着Redis中的所有写操作(但只是写操作,不包含读取操作)都会被保存在日志中。这样每当Redis重新启动时,都会从日志中读取这些写操作,并依次执行一遍,进而实现数据的持久化。

需要注意的是,在默认的Redis配置中,AOF是不开启的,因此需要更改配置文件才可以开启AOF (appendonly yes)。为了避免AOF文件的体积过大,Redis有一个后台进程会对AOF日志进行重写以减少其体积。

关于同步频率(appendfsync),可以有几个不同选项:

  • always: 每次写操作都会同步,优点是能够保证所有数据的完整性,但性能较差
  • everysec:每秒同步一次
  • no:不主动进行同步

同时,如果RDB和AOF同时开启的话,Redis会优先选择AOF(因为这种方式不会导致数据的丢失)。

如果AOF文件出现错误,可以通过运行如下命令进行修复:redis-check-aof –fix


文章作者: 逻思
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 逻思 !
  目录