持久化

redis除了缓存服务之外,同样也可以将缓存数据进行持久化处理。

推荐阅读

数据快照

默认情况下redis是开启数据快照的,默认路径是redis根目录,一个dump.rdb的文件。
快照配置

dbfilename dump.rdb # 快照文件名称
dir ./ # 快照文件路径

快照算法

save 900 1 # 900秒内,如果有1个缓存项发生变动,就更新快照
save 300 10 # 300秒内,如果有10个缓存项发生变动,就更新快照
save 60 10000

数据快照,就是典型的redis数据备份的典型方式,dump.rdb,存储起来即可。如果当前的数据崩溃了,需要还原到某个版本,只需要将备份文件,放在dump.rdb原有位置,重启redis,自动读取dump.rdb的内容。

可以通过linux定时任务进行快照备份。

AOF机制

AOF机制是redis另一种持久化机制,可以解决在快照备份时突然出现崩溃,短期内丢失数据的问题。
AOF会将每次修改记录下来。

appendonly yes # 开启AOF
appendfilename "appendonly.aof" # 文件名称

事务

基本操作

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set "test" 1
QUEUED
127.0.0.1:6379> exec
1) OK
  • multi 开启事务
  • exec 提交事务
  • discard 取消事务,执行该命令事务中的操作也会被取消

redis的事务不可进行嵌套。每次只能操作一个事务。

概念

事务操作必须保证数据的一致性,并且需要保证原子性操作,要么本次命令全部执行,要么全部不执行。

watch

该命令可以为redis提供乐观锁机制。

127.0.0.1:6379> watch key
OK


watch用来监听多个key,以此保证事务提交时,这些key没有被其他客户端修改,如果某一个key被修改,那么本次事务将会失败。

unwatch
表示取消对某些key的监听

Docker配置主从复制

主机版本角色
master6.0.7
slave16.0.7
slave26.0.7

主从配置文件

master

bind 0.0.0.0 # 默认开放访问,服务器配置公网ip
protected-mode yes # 保护模式,需配置bind ip或者设置访问密码
port 6379 # 端口
daemonize no # 是否守护进程启动
pidfile /var/run/redis_6379.pid
logfile "/log/redis.log" # 日志文件位置
requirepass 12345678 # 密码

slave1和slave2

bind 0.0.0.0 # 默认开放访问,服务器配置公网ip
protected-mode yes # 保护模式,需配置bind ip或者设置访问密码
port 6379 # 端口
daemonize no # 是否守护进程启动
pidfile /var/run/redis_6379.pid
logfile "/log/redis.log" # 日志文件位置
slaveof master 6379 # 主的ip地址和端口
masterauth 12345678 # 主的密码

docker-compose.yml

version: "3"
services:
  redis_master:
    image: redis:6.0.7
    container_name: "master"
    ports:
      - "6380:6379"
    volumes:
      - ~/redis/master/data:/data:rw
      - ~/redis/master/conf:/etc/redis:rw
      - ~/redis/master/log:/log:rw
    command: redis-server /etc/redis/redis.conf
    restart: always
    environment:  # 配置环境变量
      - TZ=Asia/Shanghai  # 设置时区
  redis_slave1:
    image: redis:6.0.7
    container_name: "slave1"
    ports:
      - "6381:6379"
    volumes:
      - ~/redis/slave1/data:/data:rw
      - ~/redis/slave1/conf:/etc/redis:rw
      - ~/redis/slave1/log:/log:rw
    command: redis-server /etc/redis/redis.conf
    restart: always
    environment:  # 配置环境变量
      - TZ=Asia/Shanghai  # 设置时区
  redis_slave2:
    image: redis:6.0.7
    container_name: "slave2"
    ports:
      - "6382:6379"
    volumes:
      - ~/redis/slave2/data:/data:rw
      - ~/redis/slave2/conf:/etc/redis:rw
      - ~/redis/slave2/log:/log:rw
    command: redis-server /etc/redis/redis.conf
    restart: always
    environment:  # 配置环境变量
      - TZ=Asia/Shanghai  # 设置时区

验证

进入master后,链接redis,输入命令info relication,可以查看当前master链接的slave信息

master.png

s1.png

s2.png

最后修改:2020 年 09 月 23 日 11 : 43 PM
如果觉得我的文章对你有用,请随意赞赏