持久化就是把内存的数据写到磁盘中去,防止服务宕机内存数据丢失。
RDB持久化
RDB是redis默认的持久化方式,按照一定的时间将内存中的数据以快照的形式保存到磁盘中,默认的文件名为dump.rdb。RDB持久化主要有三种触发方式:
save触发方式:
该命令会阻塞当前redis服务器也不能执行其他命令,直到rdb过程完成为止。(会覆盖原有的rdb文件)
bgsave触发方式:
redis进程执行fork操作创建子进程,由子进程负责RDB持久化,完成后自动结束,阻塞只发生在子进程中。
自动触发方式:
- 在配置文件中的save seconds changes 在seconds时间内有changes个key发生变化就执行快照
dir:
设置快照文件的存放路径dbfilename:
设置快照文件的文件名
RDB持久化核心配置:
vim redis.conf
dir /data/redis/6379
dbfilename dump.rdb
save 900 1 //每900秒1个更改
savee 300 10
save 60 10000
RDB持久化的优缺点:
- 优点:
速度快,适合用做备份,主从复制也是基于RDB持久化功能实现的 - 缺点:
数据丢失。快照的过程由于是在子进程中发生的,因此,在快照的过程中父进程的操作如果有数据发生修改不会反应到子进程中,修改的数据不会保存到快照里,数据有丢失的风险。
AOF持久化
AOF持久化(即Append Only File)是将redis执行的所有写操作命令记录到单独的日志文件中,当重启redis将持久化的日志中的文件进行数据恢复,如果同时启用两种持久化方式,redis则优先选择AOF恢复
rewrite机制
redis为解决每次的日志追加到文件会导致文件越来越大的一种机制。redis中的数据是一定量的,不会一直无限增长而导致aof无限增长,内存大小是一定的,到一定时候,redis会利用缓存淘汰算法自动清除一部分数据,aof会做rewrite操作来重构一个更小的aof文件,此时旧的文件将被删除。AOF也有三种触发方式:
appendfsync always #每次有数据修改发生时都会写入AOF文件。性能较差但数据完整性好
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync no #从不同步。
AOF持久化配置:
appendonly yes
appendfsync always
appendfsync everysec
appendfsync no
appendfilename “appendonly.aof”
AOF持久化优缺点:
- 优点:
默认每秒去备份数据,安全性高,数据损失小 - 缺点:
消耗比RDB高的性能去备份,使得redis性能降低;占用空间大,恢复速度慢。
小结:
如果没达到save条件、执行shutdown命令(先bgsave后shutdown),数据存在;
同时启用两种持久化AOF优先级比RDB高
重新对一个设置了键过期的key set一个新的value那么该key永不过期