本节来介绍Redis的持久化。
Redis支持两种方式持久化:RDB和AOF。默认开启RDB,而禁用AOF。
1.RDB快照方式
RDB方式,是一种快照,即每隔一段时间生成Redis内存的快照。启动redis后,默认会在当前工作目录下生成dump.rdb的快照文件。可以通过redis.conf的”SNAPSHOTTING”模块来设置RDB的属性。
# 设置RDB生成的策略,单位是秒(顺序从下往上)
save 900 1 # 在15分钟内如果有1个Key发生了变化就保存一下快照
save 300 10 # 在5分钟内如果有10个Key发生了变化就保存一下快照
save 60 10000 # 在1分钟内如果有10000个Key发生了变化就保存一下快照
## 如果禁用RDB时,只需要注释掉上面的三条策略即可# 如果保存RDB文件时出错,禁止写入新的数据
stop-writes-on-bgsave-error yes# 是否压缩RDB文件,节省空间,但是会牺牲一定的性能
rdbcompression yes# 使用RDB文件恢复数据时,是否检查RDB文件的校验和
rdbchecksum yes# RDB文件的名字(多个实例时需要设置成不同的名字)
dbfilename dum.rdb# RDB文件保存的目录,默认是Redis的家目录
dir ./
- RDB的优点:恢复速度快;
- RDB的缺点:如果在两次RDB之间发生崩溃,数据可能丢失。
2.AOF日志方式
AOF,全称是Append Only File,是一种日志方式,默认是禁用的。
开启AOF方式需要修改redis.conf配置文件中”APPEND ONLY MODE”模块的配置:
# 开启AOF日志功能
appendonly yes# AOF日志文件的名字(多个实例需要设置不同的名字)
appendfilename "appendonly.aof"# 记录日志的策略
# appendfsync always 每次操作都记录日志
appendfsync everysec (默认)每秒记录一次日志
# appendfsync no 不是禁用,而是由操作系统决定什么时候生成日志# Redis进行日志重写的时候,是否继续写入日志
no-appendfsync-on-rewrite no# 什么时候执行日志重写
auto-aof-rewrite-percentage 100 超过上次重写后大小的一倍执行重写
auto-aof-rewrite-min-size 64mb 超过64M开始执行重写
什么是日志重写
日志重写就是将一个Key的多条操作过程的结果,直接用一条赋值语句代替,删除这个Key之前的操作记录。也就是说,经过日志重写之后,将不能恢复到之前的历史值。
根据日志重写的规律可以知道,AOF文件的大小先增加,发生日志重写后变小。可以使用Redis自带的压力测试工具来观测这个现象。
bin/redis-benchmark -n 100000
- AOF的优点:数据不会丢失
- AOF的缺点:恢复相对RDB会慢一些
在实际工作中,结合RDB和AOF。相当于Oracle数据库中的完全备份和增量备份。
网友评论