redis持久化-RDB
RDB 是 Redis DataBase 的缩写,即内存块照。因为Redis的数据时存在内存中的,当服务器宕机时,Redis中存储的数据就会丢失。这个时候就需要内存快照来恢复Redis中的数据了。快照就是在某一时刻,将Redis中的所有数据,以文件的形式存储起来。
配置文件
弊端
1.不支持拉链,永远只有一个dump.rdb文件
2.丢失数据相对多一些,因为不是实时将数据落入到文件
优点
类似于java中的序列化:恢复数据速度相对快
redis中的fork()
redis使用fork函数复制一份当前进程(父进程)的副本(子进程)。fork函数采用写复制方式,当复制过程中如果有数据改动,会被同步改动到复制后的数据。因此复制的数据是执行fork时间的数据。
redis持久化-AOF
AOF (Append Only File) 持久化默认是关闭的,通过将 redis.conf 中将 appendonly no,修改为 appendonly yes 来开启AOF 持久化功能,如果服务器开始了 AOF 持久化功能,服务器会优先使用 AOF 文件来还原数据库状态。只有在 AOF 持久化功能处于关闭状态时,服务器才会使用 RDB 文件来还原数据库状态
打开AOF命令
#开启AOF
appendonly yes
#存放位置
appendfilename "appendonly.aof"
#后台自动重写
#达到最下重写占比
auto-aof-rewrite-percentage 100
#最小重写大写
auto-aof-rewrite-min-size 64mb
#IO级别,三个级别,默认是每秒
#no:redis不主动调用flush,在内核(kernel)缓冲区中什么时候满了什么时候刷,问题:可能会丢失一个buffer大小的数据
#always:redis写一个就调用一次flush,数据是最可靠的因为,每发生一次写操作,就flush一下
#每秒:每一秒钟掉一次flush,问题:可能会丢失(buffer未满)1秒钟的操作,在no和always中间
appendfsync always
appendfsync everysec
appendfsync no
AOF文件基本信息解释
*表示下面的命令有几个元素组成
$表示命令由几个字符组成
比如 *2 表示 select 0,$6表示 select,$1表示 0
如何将数据写入到磁盘
执行bgsave命令
这是会生成 dump.rdb文件
同时redis中有日志输出
解释
Background saving started by pid 2661
bgsave 开始 在pid 2661中,这个是开启一个子进程
DB saved on disk
DB保存到磁盘
RDB: 8 MB of memory used by copy-on-write
RDB:使用写时复制 8M 的内存
Background saving terminated with success
bgsave 成功
开始重写 4.0之后的版本
执行下面的命令,appendonly.aof文件也会生成一个RDB的存储
执行重写命令 bgrewriteaof
会继续生成增量日志,一个RDB和AOF的混合体,这个混合体以redis开头