Redis默认以rdb形式保存数据,rdb就是数据快照。在redis.conf中有关于rdb的配置内容。
save 900 1 900秒即15分钟内,数据有一次变动则触发快照保存 save 300 10 5分钟内10次变动 save 60 10000 1分钟内1000次变动
dbfilename dump.rdb 默认保存的名字叫做dump.rdb
创建快照的办法有如下几种:
缺点:在发生故障时,无法保障数据的完整,会有部分数据缺失。
AOF的方式很简单,每次执行会改变数据的指令都保存起来。Redis默认不开启AOF模式,需要在redis.conf中进行配置。
appendonly yes 开启AOF
appendfilename "appendonly.aof" 文件名称
在Redis的长期运行中,AOF文件会越来越大,如果发生故障,重放整个AOF文件会非常耗时,导致Redis长时期无法对外提供服务,所以有必要对AOF文件进行重写。
auto-aof-rewrite-percentage 100 当AOF文件超过之前大小的100%时触发 auto-aof-rewrite-min-size 64mb 当AOF文件大小到达64MB时触发
AOF 日志是以文件的形式存在的,当程序对 AOF 日志文件进行写操作时,实际上是将内容写到了内核为文件描述符分配的一个内存缓存中,然后内核会异步将脏数据刷回到磁盘的。
我们需要借助 glibc
提供的 fsync(int fd)
函数来讲指定的文件内容 强制从内核缓存刷到磁盘。但 "强制开车" 仍然是一个很消耗资源的一个过程,需要 "节制"!通常来说,生产环境的服务器,Redis 每隔 1s 左右执行一次 fsync
操作就可以了。
Redis 同样也提供了另外两种策略,一个是 永不 fsync
,来让操作系统来决定合适同步磁盘,很不安全,另一个是 来一个指令就 fsync
一次,非常慢。但是在生产环境基本不会使用,了解一下即可。
# appendfsync always
appendfsync everysec
# appendfsync no
重启 Redis 时,我们很少使用 rdb
来恢复内存状态,因为会丢失大量数据。我们通常使用 AOF 日志重放,但是重放 AOF 日志性能相对 rdb
来说要慢很多,这样在 Redis 实例很大的情况下,启动需要花费很长的时间。
Redis 4.0 为了解决这个问题,带来了一个新的持久化选项——混合持久化。将 rdb
文件的内容和增量的 AOF 日志文件存在一起。这里的 AOF 日志不再是全量的日志,而是 自持久化开始到持久化结束 的这段时间发生的增量 AOF 日志,通常这部分 AOF 日志很小:
于是在 Redis 重启的时候,可以先加载 rdb
的内容,然后再重放增量 AOF 日志就可以完全替代之前的 AOF 全量文件重放,重启效率因此大幅得到提升。
原文:https://www.cnblogs.com/xingzhu-nan/p/14249107.html