由于redis数据库是将数据保存在内存当中,重启机器或者故障后数据就会消失,因此我们需要将数据写入到硬盘当中。
持久化方式:RDB和AOF
RDB:通过创建快照定期将内存中的数据拷贝出副本进行备份。
阻塞问题:由于Redis 启动之后主要是通过单线程的方式完成主要的工作,所以用save命令会阻塞线程;默认使用bgsave命令,好处是生成子进程执行任务,不会阻塞线程。
AOF:每执行一条会更改 Redis 中的数据的命令,Redis 就会将该命令写入到 AOF 缓冲区中,然后再写入到 AOF 文件中(此时还在系统内核缓存区未同步到磁盘),最后再根据持久化方式( fsync
策略)的配置来决定何时将系统内核缓存区的数据同步到硬盘中。
实现步骤:
1.所有的写命令会追加到 AOF 缓冲区中。
2.将 AOF 缓冲区的数据写入到 AOF 文件中。
3.AOF 缓冲区根据对应的持久化方式( fsync
策略)向硬盘做同步操作。
4.定期对 AOF 文件进行重写,达到压缩的目的。
5.当 Redis 重启时,可以加载 AOF 文件进行数据恢复。