Redis持久化机制
1. RDB
RDB是Redis默认的持久化机制
-
RDB持久化文件,速度比较快,而且存储的是一个二进制的文件,传输起来很方便。 -
RDB持久化的时机: save 900 1:在900秒内,有1个key改变了,就执行RDB持久化。 save 300 10:在300秒内,有10个key改变了,就执行RDB持久化。 save 60 10000:在60秒内,有10000个key改变了,就执行RDB持久化。 -
RDB无法保证数据的绝对安全。
[root@VM-4-6-centos ~]# docker exec -it redis bash
root@24c6a52e162c:/data# ls
redis.aof
root@24c6a52e162c:/data# redis-cli
127.0.0.1:6379> set name shy
OK
127.0.0.1:6379> set age 24
OK
127.0.0.1:6379> [root@VM-4-6-centos ~]#
[root@VM-4-6-centos ~]# docker exec -it redis bash
root@24c6a52e162c:/data# ls
redis.aof redis.rdb
[root@VM-4-6-centos ~]# docker exec -it redis bash
root@24c6a52e162c:/data# ls
redis.aof
root@24c6a52e162c:/data# cat redis.aof
#AUTH认证,给redis设置认证登陆密码
#requirepass xxxx
#RDB持久化配置
save 900 1
save 300 10
save 60 10000
#10秒内有一个key发生变化,就持久化
save 10 1
#设置持久化文件名称
dbfilename redis.rdb
#开启AOF持久化
appendonly yes
#设置持久化文件名称
appendfilename "redis.aof"
#持久化时机
# appendfsync always
appendfsync everysec
# appendfsync no
2. AOF
AOF持久化机制默认是关闭的,Redis官方推荐同时开启RDB和AOF持久化,更安全,避免数据丢失。
-
AOF持久化的速度,相对RDB较慢的,存储的是一个文本文件,到了后期文件会比较大,传输困难。 -
AOF持久化时机。 appendfsync always:每执行一个写操作,立即持久化到AOF文件中,性能比较低。 appendfsync everysec:每秒执行一次持久化。 appendfsync no:会根据你的操作系统不同,环境的不同,在一定时间内执行一次持久化。 -
AOF相对RDB更安全,推荐同时开启AOF和RDB。
6.3.3 注意事项
同时开启RDB和AOF的注意事项:
如果同时开启了AOF和RDB持久化,那么在Redis宕机重启之后,需要加载一个持久化文件,优先选择AOF文件。
如果先开启了RDB,再次开启AOF,如果RDB执行了持久化,那么RDB文件中的内容会被AOF覆盖掉。
6.4 Redis的主从架构
单机版 Redis存在读写瓶颈的问题
| 主从架构 |
指定yml文件
version: '3.8'
services:
redis1:
image: daocloud.io/library/redis:6.0.7
restart: always
container_name: redis1
environment:
- TZ=Asia/Shanghai
ports:
- 7001:6379
volumes:
- ./conf/redis1.conf:/usr/local/redis/redis.conf
command: ["redis-server","/usr/local/redis/redis.conf"]
redis2:
image: daocloud.io/library/redis:6.0.7
restart: always
container_name: redis2
environment:
- TZ=Asia/Shanghai
ports:
- 7002:6379
links:
- redis1:master
volumes:
- ./conf/redis2.conf:/usr/local/redis/redis.conf
command: ["redis-server","/usr/local/redis/redis.conf"]
redis3:
image: daocloud.io/library/redis:6.0.7
restart: always
container_name: redis3
environment:
- TZ=Asia/Shanghai
ports:
- 7003:6379
links:
- redis1:master
volumes:
- ./conf/redis3.conf:/usr/local/redis/redis.conf
command: ["redis-server","/usr/local/redis/redis.conf"]
# redis2和redis3从节点配置
replicaof master 6379
[root@VM-4-6-centos docker-redis-master-slave]# docker exec -it redis1 bash
root@a530753d3c03:/data# redis-cli
127.0.0.1:6379> info
[root@VM-4-6-centos ~]# docker exec -it redis2 bash
root@cdb2dbf64b13:/data# redis-cli
127.0.0.1:6379>
127.0.0.1:6379> info
[root@VM-4-6-centos ~]# docker exec -it redis3 bash
root@29607d180c41:/data# redis-cli
127.0.0.1:6379>
127.0.0.1:6379> info
|