首页 > 数据库 > 数据库开发技术 > redis aof重写你了解多少
背景:
Redis 使用AOF持久化时,如果AOF文件过大,会造成Redis服务重启时加载缓慢,为此Redis有AOF优化,通过阅读本文你可以了解到如何配置Redis 持久化方式为AOF?AOF的触发条件都是有什么?
找到redis.conf,开启AOF持久化配置,默认关闭
dir /var/lib/redis
# aof 开关,改为yes 开启aof
appendonly yes
# aof 文件名定义,一般加端口
appendfilename "appendonly-6379.aof"
# 写入策略,默认everysec,每秒一次,always 对硬盘压力大,no 对硬盘压力小,丢失数据风险最大
appendfsync everysec
# 是否在后台写时同步单写,默认为no,设置为no时表示新进程set会被阻塞,yes的时候新进程不会阻塞,等待后台所有执行完成以后在执行这部分set写入aof文件
no-appendfsync-on-rewrite no
# auto-aof-rewrite-percentage 是指当前的AOF文件比上次重写的比例
auto-aof-rewrite-percentage 100
# aof文件重写最小的文件大小,即最开始aof文件必须要达到这个文件时才触发,后面的每次重写就不会根据这个变量了(根据上一次重写完成之后的大小).此变量仅初始化启动redis有效.如果是redis恢复时,则lastSize等于初始aof文件大小.
auto-aof-rewrite-min-size 64mb
# redis在恢复时,会忽略最后一条可能存在问题的指令。默认值yes。即在aof写入时,可能存在指令写错的问题(突然断电,写了一半),这种情况下,yes会log并继续,而no会直接恢复失败.
aof-load-truncated yes
AOF的触发条件有哪些
手动触发 执行 bgrewriteaof 命令
auto-aof-rewrite-min-size 表示运行AOF重写是文件最小的大小。默认64M,小于64M就会不自动重写了。
auto-aof-rewrite-percentage 表示(aof_current_size- aof_base_size) / aof_base_size 的比值。
aof文件重写之后当前文件大小增长多少就触发重写
自动触发时机 :
aof_current_size>auto-aof-rewrite-min-size
&&
(aof_current_size - aof_base_size) / aof_base_size >= auto-aof-rewrite-percentage
打开AOF配置之后,重新启动redis
打开一个命令行客户端1,找到redis目录下aof文件,查看文件大小为0
另开一个命令行客户端2,登入redis客户端
客户端2执行set 命令,最后重复对同一个key多次操作
set k1 v1
set k2 v2
set k3 v3
set k4 v4
set k5 v5
set k5 v6
set k5 v7
set k5 v8
此时回到客户端1,查看文件大小 255
客户端2执行命令,bgrewriteaof
回到客户端1,查看aof文件大小变为了168
if (server.aof_state == AOF_ON &&
server.rdb_child_pid == -1 &&
server.aof_child_pid == -1 &&
server.aof_rewrite_perc &&
server.aof_current_size > server.aof_rewrite_min_size)
原文作者:醉鱼Java;如有侵权,请联系管理员删除。