Redis持久化策略
redis提高俩种持久化策略:RDB和AOF。
开启俩种持久化方式的话,redis重启的时候会优先采用AOF文件来恢复数据,因为AOF文件比RDB文件保存的数据更完整。
RDB持久化策略
通过制定的时间间隔生成快照对数据进行存储,Redis 将数据库快照保存在名字为 dump.rdb的二进制文件中。当 Redis 需要保存 dump.rdb 文件时, 服务器执行以下操作:
-
Redis 调用forks. 同时拥有父进程和子进程。
-
子进程将数据集写入到一个临时 RDB 文件中。
-
当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。
优点
1)PDB文件非常紧凑,并且可以根据时间段来保存数据,适用于数据库的收集。
2)PDB是紧凑的单一文件,方便传输,适合容灾恢复
3)redis 父进程fork一个子进程 不影响redis的性能
4)恢复大数据优于AOF
缺点
1)丢失数据比较多
2)fork进程比较耗时 会影响redis响应速度
AOF持久化策略
通过记录每次对服务器写的操作到文件末尾,并且可以对AOF进行重写,减少所占内存空间。
优点
1)默认秒级的fsync方式,丢失数据少。
2)AOF是一个只追加写的日志文件,即使磁盘空间已满,写的过程中宕机,未执行完整的写入命令,也可以用redis-check-aof工具修复。
3)日志重写机制:重写后的新 AOF 文件包含了恢复当前数据集所需的最小命令集合。 整个重写操作是绝对安全的,因为 Redis 在创建新 AOF 文件的过程中,会继续将命令追加到现有的 AOF 文件里面,即使重写过程中发生停机,现有的 AOF 文件也不会丢失。
4)有序地存储写入操作, 这些写入操作以 Redis 协议的格式保存,易读懂易分析。
缺点
1)同样数据集,文件大于RDB
2)fsync策略,速度慢于RDB
三种fsync方式
-
每次有新命令追加到 AOF 文件时就执行一次 fsync :非常慢,也非常安全
-
每秒 fsync 一次:足够快(和使用 RDB 持久化差不多),并且在故障时只会丢失 1 秒钟的数据。
-
从不 fsync :将数据交给操作系统来处理。更快,也更不安全的选择。
推荐使用每秒fsync一次 这样数据丢失也只会丢失一秒的数据,兼顾了速度和安全性
备份redis数据
-
创建一个定期任务(cron job), 每小时将一个 RDB 文件备份到一个文件夹, 并且每天将一个 RDB 文件备份到另一个文件夹。
-
确保快照的备份都带有相应的日期和时间信息, 每次执行定期任务脚本时, 使用 find 命令来删除过期的快照: 比如说, 你可以保留最近 48 小时内的每小时快照, 还可以保留最近一两个月的每日快照。
-
至少每天一次, 将 RDB 备份到你的数据中心之外, 或者至少是备份到你运行 Redis 服务器的物理机器之外。