复制(Replication)
redis 支持两种数据持久化的方式:
- 快照持久化 snap shotting:对全量数据进行备份,默认开启
- AOF 持久化:对增量数据进行备份,默认关闭
快照持久化
redis 默认开启快照持久化。
持久化频率参数配置
在 redis 的配置文件中,默认的持久化参数是:
save 900 1
save 300 10
save 60 10000
上面参数表示:
- 900 秒内至少改变了一个 key,则在第900秒时执行一次快照持久化
- 300 秒内至少改变了十个 key,则在第300秒时执行一次快照持久化
- 60 秒内至少改变了 10000 个 key,则在第60秒时执行一次快照持久化
每次持久化之后,重新开始计时。如果在计时的 60 秒内改变的 key 的个数小于 10000 个,则不执行快照持久化,等到第 300 秒时再判断。如果到了 300 秒时,更新的 key 大于 10 个则执行快照持久化,否则等到第 900 秒再判断。如果到第900 秒时,没有更新任何 key 时不执行快照持久化,更新了至少一个 key 则执行。
持久化文件位置
默认情况下,/etc/redis.conf
配置文件中的 dir
配置的目录,同时用于快照持久化和 AOF 持久化所创建的文件。dbfilename
则是快照持久化对应的文件名:
# The filename where to dump the DB
dbfilename dump.rdb
# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /var/lib/redis
手动执行快照持久化
可以通过 bgsave
命令强制执行快照持久化:
# redis-cli bgsave
Background saving started
AOF 持久化
redis 默认关闭 AOF 持久化,需要编辑配置文件后,重启 redis 并在启动时指定配置文件。注意:打开 AOF 会清空 redis,所以最好在项目开始前就决定好是否开启。
AOF 通常有更高的备份频率,数据安全性更高,当然对服务器的压力也随之增加。
appendonly no # 这里改为 yes 后,重启 redis 并指定配置文件,则开启 AOF
appendfilename "appendonly.aof" # AOF 的文件名
# 下面 3 中备份频率,用默认的每秒备份一次即可
# appendfsync always # 每条写指令备份一次
appendfsync everysec # 每秒备份一次
# appendfsync no # 根据服务器负载情况自动判断备份时机
压缩 AOF 持久化文件
AOF 持久化会记录所有的写指令,文件有很大的压缩空间。例如用户的多个 incr
指令可以用一条 set
指令代替。redis 为我们提供了优化压缩 AOF 文件的指令:
redis-cli BGREWRITEAOF
执行一个 AOF文件 重写操作。重写会创建一个当前 AOF 文件的体积优化版本。