文章目录
前言
体能状态先于精神状态,习惯先于决心,聚焦先于喜好。
Redis的持久化
作为非关系型数据库,Redis的一大优势就是支持数据持久化,这样就不会
像Memcache一样,一旦重启,内存中保存的数据就完全消失了。
那么 Redis 的持久化机制是怎样的呢?这正是本文所介绍的内容。
快照(RDB)和只追加文件(AOF)
Redis 提供了两种持久化方式:
快照:按照约定规则,在某一刻将所有数据备份到硬盘。
AOF:append-only file,只追加文件,在Redis执行命令时,将执行的写命令复
制到硬盘里面。
Redis 持久化的自由搭配
Redis 允许你不使用持久化功能,也允许你搭配使用 快照和AOF 中的一种或两种。
默认情况下,Redis 使用快照持久化-你可以从 redis.conf 中 SNAPSHOTTING 关键字查看具体内容。
如果你同时使用了 AOF和RDB,那么在重启Redis的时候,Redis会用 AOF 的文件进行恢复工作。
AOF (append-only file)持久化
append-only file
AOF 是Redis 备份的另外一种方式,该方式不同于快照方法存储整个内存的内容,而是将Redis执行的命令保存到一个文件中——append only file,将命令追加到文件末尾。
aof 文件追加的三种方式
根据何时将操作命令写入磁盘aof文件的尾部,Redis提供了三种aof追加方式
默认配置是:everysec,即每隔一秒追加一次
no:由操作系统决定何时写入
命令行会先被存储到缓存中,至于什么时候写入磁盘文件,依赖于操作系统
有可能造成部分缓存没有被写入文件中,从而造成数据丢失
这种方式是最快的
always:同步追加
可以将命令设置为每一次执行Redis命令都将命令行直接写入磁盘的文件中
这样会极大的降低Redis的性能——但是可以保证aof文件总是记录了完整的操作命令
频繁写入会降低磁盘的寿命,对于固态硬盘尤其注意避免这种配置
everysec:每秒追加一次
每隔一秒,将缓存中的命令行追加到 aof文件末尾
是一种折中方案
该方案是Redis默认配置
相关配置
位于 redis.conf
# appendfsync always
appendfsync everysec
# appendfsync no
aof 文件过大的问题
aof 不断在文件末尾增加命令会造成这个文件无限的增加,这样在重启Redis或者以之在另一台机器复制Redis时,在启动阶段会耗费相当长的时间-并且早起的命令行的数据可能已经不存在了,没必要再写一次。
Redis 提供了自动 resize 和手动 resize 两种方式进行 aof 文件的缩小工作
手动触发
通过命令行 BGREWRITEAOF ,该命令行会创建一个子进程,将aof中过期的命令去除,这同样会有性能问题和内存占用问题——参考 快照模式中的BGSAVE命令
BGREWRITEAOF
自动触发
在 redis.conf 文件中,Redis 提供了自动对 aof 文件进行缩减的配置
当本次aof文件大小超过 64mb 并且比上次重写之后的体积大100%时,自动触发 BGREWRITEAOF 命令
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
开启 AOF
默认情况下,Redis 并没有开启 AOF。
配置位置为 redis.conf
############################## APPEND ONLY MODE ###############################
appendonly no
默认的AOF文件名称为appendonly.aof
# The name of the append only file (default: "appendonly.aof")
appendfilename "appendonly.aof"
本文深入探讨Redis的两种数据持久化方法:快照(RDB)和只追加文件(AOF)。阐述了它们的工作原理,如何配置及优缺点。特别关注AOF的三种追加策略,以及解决aof文件过大的策略。
354

被折叠的 条评论
为什么被折叠?



