Redis用作缓存,直接从内存中读取数据,相比于传统的将数据保存在磁盘中响应速度要快很多。但是服务器宕机,那么内存中的数据将全部丢失,该如何恢复这些数据呢。
一个简单的方案是,从后端数据库中恢复这些数据。但是频繁的访问数据库会给数据库带来压力的同时,也会降低Redis的性能。
对于Redis来说,如何避免从后端数据库中恢复数据来实现数据的持久化是至关重要的。Redis 提供了 RDB 和 AOF 两种持久化方案,将内存中的数据保存到磁盘中,避免数据丢失。
本文将介绍 AOF 相关的原理;
AOF( append only file )持久化以独立日志的方式记录每次写命令,并在 Redis 重启时在重新执行 AOF 文件中的命令以达到恢复数据的目的。AOF 的主要作用是解决数据持久化的实时性。
AOF日志
Redis是先执行命令,再把数据写入内存,然后记录日志,如下图所示:
AOF的内容
MySQL中redo log,记录的是修改后的数据,AOF中记录的是以文本的形式来记录收到的每一条命令。
执行以下的命令,
set testkey testvalue
看一下AOF日志的内容,*3
代表当前的命令有三个部分,分别是set
,testkey
,testvalue
,每个部分的开头都是由$+数字
开头,后面跟着对应的命令、键或者值,数字代表的就是对应的命令、键或者值有多少个字节。
$3 set
表示的set
命令有3个字节,如下图所示: