Redis如何将数据写入磁盘
持久性是指将数据写入持久存储,例如固态磁盘 (SSD)。Redis 提供了一系列持久性选项。这些包括:
- RDB(Redis 数据库):RDB 持久性以指定的时间间隔执行数据集的时间点快照。
- AOF(仅追加文件):AOF持久性记录服务器接收到的每个写操作。然后可以在服务器启动时再次重播这些操作,从而重建原始数据集。命令使用与 Redis 协议本身相同的格式进行记录。
- 无持久性:您可以完全禁用持久性。有时在缓存时会使用到这一点。
- RDB + AOF:您还可以在同一个实例中组合 AOF 和 RDB。
总结 :
持久化是因为要考虑redis的重启或崩溃的情况。 持久化机制将 Redis 数据库的状态保存到磁盘中,以便在重新启动时可以将数据重新加载到内存中,从而保护了数据的完整性和持久性。
如果你的redis里的key-value不重要,那么就不用搞这个。
(当然一般的重要的东西,我们都会落库,不会放到redis。 但是如果你用了redis 保存一些很重要的东西,那么这一部分就很有必要了)
关系型数据库的优点
- RDB 是 Redis 数据的非常紧凑的单文件时间点表示形式。RDB 文件非常适合备份。例如,您可能希望在最近 24 小时内每小时归档一次 RDB 文件,并在 30 天内每天保存一个 RDB 快照。这使您可以在发生灾难时轻松恢复不同版本的数据集。
- RDB 非常适合灾难恢复,它是一个紧凑的文件,可以传输到远程数据中心或 Amazon S3(可能是加密的)。
- RDB 最大限度地提高了 Redis 的性能,因为 Redis 父进程为了持久化需要做的唯一工作就是派生一个子进程,该子进程将完成其余所有工作。父进程永远不会执行磁盘 I/O 或类似操作。
- 与 AOF 相比,RDB 允许更快地重新启动大数据集。
- 在副本上,RDB 支持重启和故障转移后的部分重新同步。
总结
Redis作为内存数据库,当它写入磁盘时,有两个策略或者说方案。一是RDB,一是AOF。
RDB相当于快照,也就是redis内存的备份。这个备份有几种时间策略,比如说每小时一次,或者redis 内存的键改动多少次后备份一次。好处是它很少影响性能,以及备份了多个时间点的数据。缺点是RDB可能丢失最近几分钟或近一个小时的改动。
Redis目前默认是RDB,会生产dump.rdb文件,但是RDB的参数配置是没有打开的。也就是不会默认每小时保存快照。
AOF相当于记录了redis数据库的所有写入操作,类似于db会记录操作日志。
那么为了记录redis的每个写入操作,对于性能上有一些影响,相对的,对于数据的完整性方面就比RDB更好。优点是能够保证最新的操作记录和内存数据,缺点是文件会比RDB大。
目前AOF的有几种同步(fsync )策略。比如每秒同步一次,每次写操作都同步一次,和根据不同步。推荐的是每秒同步一次。
操作记录
RDB
打开redis.conf配置文件
dir这个配置会影响dump.rdb的位置,默认是./ 表示dump文件会 保存在 Redis 服务器启动时的工作目录(working directory)中。工作目录通常是运行 Redis 服务器的当前目录
也就是这个目录下;
save配置没有放开注释,表示rdb不会继续生产文件了。当你要用,记得放开save这个配置。
AOF
您可以在配置文件中打开 AOF:
appendonly yes
标红的是两个重要的aof配置。 具体含义看下面这个截图。
注释里也说明了aof和rdb是可以同时使用的,但是aof会优先,因为他更能保证durability(acid里的d 表示持久性)
总结
当我同时打开aof和rdb时。我有了这些文件: