默认配置
注:默认情况下,持久化配置是关闭的
#持久化开关配置(yes 开启 no 关闭)
appendonly no
#持久化类型
#always: 每次操作都会立即写入aof文件中(性能最低,不推荐)
#everysec: 每秒持久化一次(默认配置)(折中方案,推荐)
#no: 不主动进行同步操作,默认30s一次(redis重启或服务器重启会丢失30内的数据)
appendfsync everysec
默认配置情况下,redis是如何同步保存数据到磁盘上的?
如下配置:
save 900 1
save 300 10
save 60 10000配置含义:
900秒内,如果超过1个key被修改,则发起快照保存
300秒内,如果超过10个key被修改,则发起快照保存
60秒内,如果1万个key被修改,则发起快照保存
开启持久化配置(首次配置)
appendonly yes
appendfsync everysec
注:切记,线上redis在运行期间,不要直接修改配置文件,重启redis,这样操作会造成数据全部丢失。
开启持久化配置(在线修改)
redis执行命令
#查看AOF状态
> config get appendonly
appendonly
no#在线设置AOF开关为yes
>config set appendonly yes
ok
#修改配置文件(这里如果不修改,下次redis重启时,持久化配置仍然是关闭状态)
appendonly yes
#查看数据
keys *
#结束
开启持久化,如何解决AOF太大的问题?
AOF文件重写解决日志文件太大的问题
配置说明
auto-aof-rewrite-percentage 100 #AOF文件重写增长比例
aof文件增长比例,指当前aof文件比上次重写的增长比例大小。aof重写即在aof文件在一定大小之后,重新将整个内存写到aof文件当中,以反映最新的状态(相当于bgsave)。这样就避免了,aof文件过大而实际内存数据小的问题(频繁修改数据问题).
auto-aof-rewrite-min-size 64mb #AOF文件重写最小的文件大小AOF文件重写最小的文件大小,即最开始aof文件必须要达到这个文件时才触发,后面的每次重写就不会根据这个变量了(根据上一次重写完成之后的大小).此变量仅初始化启动redis有效.如果是redis恢复时,则lastSize等于初始aof文件大小.
AOF文件的重写
AOF为何有重写的机制
redis中的数据是有限的,很多数据可能会自动过期,也有可能会被用户删除,但是这些操作都会被AOF文件记录下来,所有有可能存在AOF文件越来越大的情况,意思就是说,重建数据集根本不需要执行所有AOF记录的命令,为了处理这种情况,会有一种rewrite策略,在redis 2.4之前是需要手动执行BGREWRITEAOF命令来进行重写AOF文件,redis 2.4版本之后提供了自动rewrite的操作。我们可以配置rewrite的策略
就是上面提到的参数
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
最少AOF文件需要达到64mb就会进行重写,重写了之后,当检测到当前的AOP文件增长幅度大于100%,也就是64mb,即当前的AOF文件大小为128mb的时候,就会自动触发对AOF进行重写操作。
快照备份易恢复,文件也小,但是如果遇到宕机等情况的时候快照的数据可能会不完整。AOF备份,数据完整度高,但是随着系统的运行,AOF文件的体积会越来越大,极其占用硬盘的空间,AOF文件的重写在一定程度可以缓解这个问题。
当AOF的备份文件过大时,手动输入bgrewriteaof命令,进行文件重写
手动同步数据
redis执行命令
方式1(会造成redis主进程阻塞,生产环境慎用)
save
方式2(只有在 fork() 子进程时有短暂的阻塞)
bgsave
方式3:
命令:save m n
save m n 是指在 m 秒内,如果有 n 个键发生改变,则自动触发持久化。
参数 m 和 n 可以在 Redis 的配置文件中找到,例如,save 60 1 则表明在 60 秒内,至少有一个键发生改变,就会触发 RDB 持久化。
自动触发持久化,本质是 Redis 通过判断,如果满足设置的触发条件,自动执行一次 bgsave 命令。 注意:当设置多个 save m n 命令时,满足任意一个条件都会触发持久化
方式4
flushall
flushall 命令用于清空 Redis 数据库,在生产环境下一定慎用,当 Redis 执行了 flushall 命令之后,则会触发自动持久化,把 RDB 文件清
常用命令
dbsize 查询key数量
scan 0 MATCH *playerModule_* 查询包含playerModule_的key数量