Redis持久化
RDB(快照)和AOF(记录数据命令过程,日志)
RDB
save命令
输入save命令,会在data目录下生成一个dump.rdb文件
修改配置文件6379的。
vim /conf/redis-6379.conf
dbfilename dump-6379.rdb 存储文件名称
rdbcompression yes 开启压缩
rdbchecksum yes 开启检测
重启redis
ps -ef|grep redis
kill -s 9 进程号
可以通过rdb启动的时候自动恢复
save指令的rdb方式会占用资源,会造成redis阻塞。
第二种rdb方式,后台执行
bgsave指令,不是立即执行的
发送指令到redis,会返回消息,会调用fork子进程,创建rdb文件,返回redis
bgsave对save阻塞问题进行优化。
相关配置
stop-writes-on-bgsave-error yes 后台存储过程出现错误,是否停止保存操作
第三种rdb方式,自动执行
配置save second changes
如果second时间范围内,监控到changes数量的key发生变化,就会进行持久化
save 900 1 900秒内一次变化
在conf/redis-6379.conf里面配置
save 10 2 每10秒2个key发生变化就会持久化,在data目录下产生rdb文件
save配置原理:要根据时机情况配置
save指令是同步的,阻塞客户端,但没有额外的内存消耗,不会启动新进程
bgsave指令,异步,非阻塞客户端,会产生额外的内存消耗,会产生新进程
rdb特殊化的启动形式
全量复制
服务器运行过程中重启
debug reload
关闭服务器时指定保存数据
shutdown save
RDB优缺点
存的时二进制文件,存储效率高
RDB内存redis某个时间点的快照,非常适合数据备份
RDB恢复速度比AOF速度快
用于灾难恢复
可能造成数据丢失
数据量巨大,效率非常低
AOF
日志,实时持久化。
有指令过来,先放到缓存区,为了生成aof文件
AOF写数据三种方式
always(每次)
0失误,性能较低
everysec(每秒)
宕机会丢失1秒的数据,建议使用,也是默认配置
no(系统控制)
配置文件开启AOF功能
配置appendonly yes|no 是否开启AOF持久化,默认不开启状态
配置appendfsync always|everysec|no
配置appendfilename filename 设置生成的aof文件名
配置dir 设置文件存放的位置
重新启动redis-server conf/redis-6379.conf
在data目录下会产生一个aof文件appendonly.aof 默认大小是0
set相同的key,只需要执行最后一条key就可以,也就是aof的重写
AOF重写
降低磁盘空间
恢复变快
AOF重写规则
进程内已超时的数据不在写入文件
忽略无效指令
对同一个数据的多条指令合并为一条命令
AOF重写方式,手动和自动
手动重写: bgrewriteaof
自动重写:auto-aof-rewrite-min-size size 当前文件大于这个大小就重写
auto-aof-rewrite-percentage percentage 达到百分比就重写
RDB和AOF区别?