Docker Image Version
redis:7.0.11-alpine
单点删除
docker rm -f redis-single
单点启动
docker run -d --hostname redis-single --name redis-single --log-driver=json-file \
--log-opt max-size=100m --log-opt max-file=3 --restart=unless-stopped \
-v redis-single:/data -p 6379:6379 redis:7.0.11-alpine redis-server \
--requirepass ChangeMe --appendonly yes
这样启动所有数据库自动备份文件会保存在容器的/data
下面,如下所示
/data # ls -l
total 12
drwx------ 2 redis redis 4096 Jun 14 10:57 appendonlydir
-rw------- 1 redis redis 89 Jun 14 11:00 dump.rdb
-rw------- 1 redis redis 2 Jun 14 10:57 redis_6379.pid
其中appendonlydir
存放备份的AOF文件。
持久化
Redis 持久化配置有四种模式,如下表所示:
模式 | 解释 |
---|---|
RDB (Redis Database) | 每隔一段时间间隔给 Redis 数据集做一次快照。这种模式能以较快的速度恢复数据,但是会丢失间隔时间内的数据,默认打开 |
AOF (Append Only File) | 持久化每一次写入操作至日志。当服务重启的时候,可根据日志恢复数据。这种模式虽然可以最大程度恢复数据,但是持久化日志处理操作较多且会占用较大性能和空间,且数据恢复时间较慢。它默认是不打开的,需要设置--appendonly yes ,同时默认每秒向硬盘同步一次数据,也就是说最多丢失一秒的数据 |
No persistence | 不持久化,通常 Redis 用来做高速缓存 |
RDB + AOF | 两种模式都配置,但 Redis 会优先选择 AOF 恢复数据 |
RDB 模式操作
RDB 模式开启后,是按照在满 M 次写操作后且到达间隔时间 N 秒后进行的备份,备份文件名默认为dump.rdb
如上所示。手动操作我们则有两种指令save
和bgsave
,但是save
会阻断 Redis 读写,所以一般用bgsave
在后台使用。
bgsave N M
AOF 模式操作
首先也是最重要的是配置appendonly
为yes
,同时它还有一个appendfsync
参数,有三种配置为always
、everysec
和no
三种。always
操作将会导致 Redis 数据库性能变得非常非常慢,失去了这款数据库自身存在意义;而no
则是使用所在系统的文件系统同步时间,一般默认为 30s ,这样就会丢失较多数据;所以这个参数我们尽可能使用默认值 everysec
。其手动执行会导致与自动执行冲突,产生不可控的 bug,所以在这里不做赘述。