写点什么

Redis 入门四:数据持久化

用户头像
打工人!
关注
发布于: 1 小时前
Redis入门四:数据持久化

主要内容:

本篇内容主要讲解 Redis 的数据持久化,包括持久化方式和其他注意事项

持久化:

首先要知道什么是持久化:虽然说 Redis 经常是作为缓存来使用,但是还是要把数据从内存中持久化到硬盘中,以此来应对服务器突然宕机导致数据丢失。

持久化方式:

Redis 主要有两种数据持久化方式:

  • RDB(Redis DataBase)

  • AOF(Append of File)

RDB 持久化:

RDB 持久化:在指定的时间间隔内将内存中的所有数据的快照写入到硬盘中,即 snapshot 快照,数据恢复的时候是将快照文件直接读入到内存中。

持久化步骤:Redis 会单独创建(fork)一个子进程来进行数据的持久化,因此不影响数据的读写。这个子进程会先把数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程主进程不进行任何 IO 操作,因此确保了极高的性能。如果要进行大规模数据恢复,并且对数据恢复的完整性不敏感,RDB 方式比 AOF 方式高效,其缺点就是最后一次持久化后的数据可能丢失。为什么最后一次可能丢失呢?因为 RDB 是隔一段时间进行持久化,比如 20s 有 10 个数据发生变化,就会进行一次持久化,如果在第 2 个 20s 只有 5 个数据发生变化,因此不会持久化,这时服务器突然断电,就会导致数据丢失。

现在再来说说 fork 的作用:fork 的作用就是复制一个与当前进程一样的进程,新进程的所有数据(变量,环境变量,程序计数器等)数值都和原进程一样,但是是一个全新的进程,并作为原进程的子进程。在持久化中用到了写时复制技术。

AOF 持久化:

AOF 持久化:以日志的形式来记录每个写操作(增量保存:就是在后面追加,有新操作,只把新操作添加进去)将 Redis 执行过的所有写操作记录下来,读操作不记录,只允许追加问阿金,不可以改写文件。Redis 在启动之初,会读取该文件重新构建数据库,换句话说,重启之后,就根据日志文件的内容将写指令从前到后执行一次,以完成数据的回复工作。

小贴士:当 Redis 同时开启 RDB 和 AOF 时,Redis 重启后,会读取 AOF 文件。

AOF 可以进行同步频率设置:

  • appendfsync always:始终同步

  • appendfsync everysec:每秒同步

  • appendfsync no:不主动进行同步,把同步时机交给操作系统

AOF 利用追加的方式,文件会越来越大,为避免此情况,新增重写机制,当 AOF 文件的大小超过所设定的阈值时,redis 会启动文件压缩,只保留可以恢复数据的最小指令集。


发布于: 1 小时前阅读数: 3
用户头像

打工人!

关注

打工人! 2019.11.10 加入

InfoQ年度最佳内容获得者。 InfoQ签约作者 本人打工人一枚,自动化和控制专业入坑人一枚。目前在研究深度强化学习(DRL)技术。准备入坑互联网小白一枚。喜欢了解科技前沿技术,喜欢拍照。

评论

发布
暂无评论
Redis入门四:数据持久化