Redis是一个内存数据库,数据保存在内存中。但咱们都知道存储在内存中的数据会由于外部因素而丢失,因此Redis会把数据持久化到磁盘中,至因而如何持久化呢?redis
根据redis.conf配置里的save m n定时触发(用的是BGSAVE)数据库
主从复制时,主节点自动触发缓存
执行Debug Relaod服务器
执行Shutdown且没有开启AOF持久化网络
# 在几秒内改动了多少数据就触发持久化 # 想禁用的话不设置save 或者save "" save 900 1 save 300 10 save 60 10000 # 备份进程出错主进程中止写入操做 stop-writes-on-bgsave-error yes # 是否压缩rdb文件 推荐no 相对于硬盘成本cpu更值钱 rdbcompression yes
全量备份老是耗时的,有时候咱们提供一种更加高效的方式AOF,工做机制很简单,redis会将每个收到的写命令都经过write函数追加到文件中。通俗的理解就是日志记录。app
记录除了查询之外的全部变动数据库状态的指令异步
以append的形式追加保存到AOF文件中(增量)函数
日志重写解决AOF文件不断增大的问题,原理以下性能
调用fork,建立一个子进程测试
子进程把新的AOF写到一个临时文件里,不依赖原来的AOF文件
主进程持续将新的变更同时写到内存和原来的AOF里
主进程获取子进程重写AOF完成信号,往新AOF同步增量变更
使用新的AOF文件替换掉旧的AOF文件
# 默认关闭若要开启将no改成yes appendonly no # append文件的名字 appendfilename "appendonly.aof" # AOF文件的写入方式 # always一旦缓存区内容发生变化就写入AOF文件中 appendfsync always # everysec 每一个一秒将缓存区内容写入文件 默认开启的写入方式 appendfsync everysec # 将写入文件的操做交由操做系统决定 appendfsync no # 当AOF文件大小的增加率大于该配置项时自动开启重写(这里指超过原大小的100%)。 auto-aof-rewrite-percentage 100 # 当AOF文件大小大于该配置项时自动开启重写 auto-aof-rewrite-min-size 64mb
若是redis没有升级到4.0,优先选择 RDB 仍是 AOF 呢?
分析对比两种方式并作了测试后,发现这是两种不一样风格的持久化方式。那么应该如何选择呢?