redis是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。radis有很快速的读写效率,运行时将数据存储在内存当中,不用担心内存中的数据一旦系统重启就会消失,redis是支持数据持久化的,redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的日志文件,可以将内存中的数据同步到磁盘保证数据的持久化。
redis对数据持久化有两种策略:一是RDB(快照策略),二是AOF(追加策略)
1、RDB(快照策略)
redis默认的情况下,是快照RDB的持久化策略,RDB持久化策略是在一个特定的时间内,会fork出一个子进程,子进程将这段时间内内存里面的数据以快照的方式写入一个二进制RDB文件当中,这种持久化策略并不能完全的数据持久化,因为他是定时保存,如果redis突然关闭,就会倒是最后一段时间内的数据没有保存,导致数据的丢失。
优点:
- RDB文件是二进制文件,所以体积比较小, 适合备份及远距离传输
- RDB是定时存储数据,它可以很快恢复不同版本或者不同时间段数据
- 适合于容灾恢复,备份文件可以很快的进行远距离传输,也可以在其他服务器恢复
- RDB 能使 Redis 的性能发挥的最大化,在进行数据备份的时候,Redis 只需要 fork 出一个子进程,让子进程来完成数据的备份。Redis 主要进程是不需要进行与磁盘的IO流操作。
缺点:
- RDB是定时保存,如果设备突发故障恢复数据的时候会丢失一部分数据
- RDB经常会fork出子进程进行数据备份操作,大量的数据操作,fork进程也会损耗大量的时间
- 每次执行持久化操作的间隔时间较长。
AOF(追加策略)
AOF就是将服务器每一次的操作都追加到AOF日志文件当中,当AOF日志文件过大,它会在后台重写AOF文件。在服务器重新启动的时候,会将AOF文件当中的操作重新执行一遍,从而达到备份数据。
优势:
- AOF是追加日志文件,因此可以较为完整的备份数据,不会丢失过多的数据
- AOF持久化策略灵活,可以选择多种fsync策略,使 Redis 可用性更高
- AOF日志文件过大时,会在后台重写AOF日志文件
- 如果不小心通过命令将数据清空了,也可以通过将日志文件中清空数据的命令删除,重新加载redis,数据就可以会恢复了
劣势:
- 相比较RDB文件来说,AOF日志文件比较大,不容易远程传输
- 整体上来看AOF的数据会比RDB要慢,具体要看fsync策略的选择
- 使用文本格式还原数据,所以数据还原速度一般