Redis持久化

61 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情


Redis为了保证效率,数据缓存在了内存中,但是内存中的数据无法永久保存,若需要永久保存数据,则需要Redis的持久化。

RDB (Redis DataBase)

RDB持久化方式能够在指定的时间间隔内对数据进行快照存储。

Redis会单独创建(fork)一个子进程来进行持久化。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。

触发机制

  • 满足配置文件中设置的save规则
  • 执行 flushall 命令清空整个Redis服务器数据(删除所有数据库的所有key)
  • 退出Redis

自动生成一个rdb文件

恢复rdb文件中的数据

将rdb文件存放在Redis的启动目录,Redis启动时会自动检查dump.rdb,恢复其中的数据。

查看需要存在的位置

127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/redis/bin"

优点

  • 适合大规模的数据恢复
  • 对数据的完整性不高

缺点

  • 需要一定的时间间隔进程操作,如果Redis意外宕机了,最后一次修改的数据就会丢失
  • fork进程时会占用一定的内存空间

AOF操作

appendonly.aof

以日志的形式来记录每个写操作(不记录读操作),将Redis执行过的所有指令记录下来。

只能追加文件,不可以修改文件。

Redis重启时,根据日志文件的内容,将写命令从前到后执行一次,以完成数据的恢复工作。

优点

  • 每一次修改都同步,文件的完整性更好
  • 每秒同步一次,可能会造成丢失
  • 不同步,效率更高 缺点
  • 相对于数据文件来说,aof远远大于rdb,修复速度也比rdb慢
  • aof的运行效率也比rdb慢

redis默认的配置是RDB持久化


Redis用作缓存时,如果只是希望数据在服务器运行时存在,也可以不使用持久化