1. Redis的持久化
Redis 为了保证效率, 数据缓存在了内存中, 但是会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件中, 以保证数据的持久化.
Redis 的持久化策略有两种:
- RDB,简而言之,就是在不同的时间点,将 redis 存储的数据生成快照并存储到磁盘等介质上。
- AOF,则是换了一个角度来实现持久化,那就是将 redis 执行过的所有写指令记录下来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
- RDB 和 AOF 两种方式也可以同时使用,在这种情况下,如果 Redis 重启的话,则会优先采用 AOF 方式来进行数据恢复,这是因为 AOF 方式的数据恢复完整度更高。
1.1 RDB
在不同时间点将Redis中的数据保存到文件中.
- 优点: RDB快照方式比较适合用于备份,比如,你可以在最近24小时内, 每小时备份一次, 并且在每个月的每一天也备份一个RDB文件.
这样即使遇上问题, 也可以随时将数据还原到不同时间点, RDB非常适合灾难性恢复. - 缺点: 需要进行大规模数据的恢复, 而且对数据的完整性不是非常敏感, RDB会存在数据丢失.
1.2 AOF
将所有Redis执行过的写操作记录下来, 下次启动Redis时候会重新执行一遍这个命令, 就可以实现数据的完整性.
每一个写命令都通过write函数追加到appendonly.aof中, 配置如下:
appendfsyncyesappendfsync always #每次有数据修改发生时都会写入AOF文件
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
- 优点: 可以最大程度保证数据的完整性. 使Redis变得非常耐久, AOF的默认策略是每秒恢复一次, 这种设置, 就算发生故障停机, 也最多丢失一秒钟的数据.
- 缺点: 对于相同的数据集来说, AOF 的文件体积通常要大于 RDB 文件的体积, AOF 的速度可能会慢于 RDB.
好了,我们说了这么多,也详细介绍了RDB和AOF, 那么小伙伴儿们是不是有疑惑了, 我们该用哪一种呢?
1.3 我们该选择哪一种持久化方式
- 如果你非常关心你的数据, 但是任然能接受数分钟内的数据丢失,那么可以使用RDB持久化, 而且RDB效率要比AOF快.
- 数据库备份和灾难恢复: 定时生成 RDB 快照非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度快.
- 但是如果你不能接收数分钟数据的丢失, 对数据恢复效率要求也不高, 那么就选择AOF持久化.
- 当然了, Redis支持开启RDB和AOF结合使用, 系统重启后, Redis会优先使用AOF来回复数据, 这样丢失的数据会最少.