RDB存储的弊端
AOF解决思路
AOF(append only file)持久化:不记录数据,只是以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令达到恢复数据的目的
AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式(优先用AOF,再使用RDB)
always:每次写入操作均同步到AOF文件中,数据零误差,性能较低,一般不建议使用
everysec:每秒将缓冲区中的指令同步到AOF文件中,数据准确性高,性能较高,再系统突然当即的情况下最多丢失1秒内的数据,一般建议使用,同时也是默认配置
no:由操作系统每次同步到AOF文件的周期,整体过程不可控
配置文件.conf
中配置
是否开启APF持久化功能,默认为不开启
appendonly yes|no
配置AOF写策略
appendfsync always|everysec|no
修改AOF持久化文件名,默认文件名为appendonly.aof
,建议配置为appendonly-端口号.aof
appendfilename filename
AOF持久化文件保存路径,与RDB持久化文件保持一致即可
dir
测试always写策略
后台启动后,配置的数据目录下出现appendonly.aof
文件,此时文件大小还是0字节
由于我们配置的AOF存储方式是always,每次写指令AOF文件都会记录
我们启动客户端,执行2个写指令
然后我们查看AOF文件中的内容
测试everysec写策略
修改配置文件中的写策略
杀掉进程后重启redis服务器
启动客户端插入一些数据
查看appendonly.aof
文件
如果连续执行以下指令,会造成AOF文件冗余,连续三次set同一个变量是没必要的,记住最后一次set即可;同理,连续三次incr也是没有必要的,直接求和set即可
随着命令不断写入AOF,文件会越来越大,为了解决这个问题,Redis引入了AOF重写机制压缩文件体积。AOF文件重写是将Redis进程内的数据转化为写命令同步到新AOF文件的过程,简单说就是将对同一个数据的若干个条命令执行结果转化成最终结果数据对应的指令进行记录
AOF重写作用
AOF重写规则
AOF重写方式
指令方式:手动重写
bgrewriteaof
验证手动重写指令 bgrewriteaof
修改配置文件后,重启服务
客户端连接后,连续set三次
查看一下appendonly-6379.aof
手动执行bgrewriteaof
指令,重写aof文件
查看aof文件,文件重写后占用空间变小了
客户端给list1中插入三个数据,并删除变量name
查看appendonly-6379.aof
客户端输入bgrewriteaof
指令,重写aof文件
查看appendonly-6379.aof
bgrewriteaof指令工作原理
配置文件方式:自动重写
auto-aof-rewrite-min-size size # size的默认大小比较大,32M或64M,超过size触发重写
auto-aof-rewrite-percentage percentage # 超过百分比,触发AOF重写
自动重写触发对比参数(运行指令info Persistence获取具体信息)
aof_current_size
aof_base_size
自动重写触发条件
输入info指令可以获得以下信息
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1655626139
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:0
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0
always:主进程执行set,子进程写AOF文件中相关信息 everysec:主进程执行set,子进程先把相关信息写入AOF缓存区(突然停电,这里面的数据就丢了),时间到1s后,写入AOF文件
配置everysec重写方式:根据配置文件,后台进程执行bgrewriteaof,先给用户返回提示信息。然后用左边子进程写入aof缓存区的数据重写临时aof文件,最终会讲临时aof文件的内容更新到真正的aof文件,然后临时的aof文件就被删除了
基于需求选择RDB和AOF
综合比对