秒懂Redis:持久化与主从复制

持久化:

  1. 概述:
    1. Redis 的高性能是由于将其所有数据都存储在了内存中,为了使 Redis 在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化
    2. Redis 支持两种方式的持久化,一种是 RDB 方式,一种是 AOF 方式。可以单独使用某一种或者将二者结合使用
  2. RDB 持久化:
    1. RDB 方式的持久化是通过快照(snapshotting) 完成的,当符合一定条件时 Redis 会自动将内存中的数据进行快照并持久化到硬盘
    2. RDB 时 Redis 默认采用的持久化方式,在 redis.conf 配置文件中默认有以下配置:
      1. save  900  1
      2. save  300  10
      3. save  60  10000
    3. save 开头一行就是持久化配置,可以配置多个条件(每行配置一个条件),每个条件之间是 "或"的关系
      1. "save  900 1":表示15分钟(900秒)内至少一个键被更改则进行快照
      2. "save  300  10":表示 5 分钟(300秒) 内至少 10 个键被更改则进行快照
    4. 在 redis.conf 中:
      1. 配置 dir 指定的 rdb 快照文件的位置
      2. 配置 dbfilename 指定 rdb 快照文件的名称
    5. Redis 启动后读取 RDB 快照文件,将数据从硬盘载入到内存。根据数据量大小与结构和服务器性能不同,这个时间也不同。通常将记录一千万个字符串类型键,大小为 1GB 的快照文件载入到内存中需要花费 20 ~ 30 秒钟
  3. 问题总结:
    1. 通过 RDB 方式实现持久化,一旦 Rdis 异常退出,就会丢失最后一次快照以后更改的所有数据。这就需要开发者根据具体的应用场合,通过组合设置自动快照条件的方式来将可能发生的数据损失控制能够接受的范围
  4. AOF持久化:
    1. 默认情况下 Redis 没有开启 AOF(append only file)方式的持久化,可以通过 appendonly 参数开启:
      1. appendonly  yes
    2. 开启 AOF 持久化后每执行一条会更改 Redis 中的数据的命令,Redis 就会将改命令写入硬盘
    3. 硬盘中的 AOF 文件:
      1. AOF 文件的保存的位置和 RDB 文件的位置相同,都是通过参数 dir 参数设置的,默认的文件名是 appendonly.aof
      2. 可以通过 appendfilename 参数修改:appendfilename  appendonly.aof

主从复制:

  1. 概念:        
    1. 持久化保证了即使 redis 服务重启也不会丢失数据,因为 redis 服务重启之后会将硬盘上持久化的数据恢复到内存中
    2. 但是当 redis 服务器的硬盘损坏了可能会导致数据丢失,如果通过 redis 的主从复制机制就可以避免这种单点故障
  2. 说明:
    1. 主 redis 中的数据有两个副本(replication),即从 redis1 和从 redis2,即使一台 redis 服务器宕机,其他两个 redis 服务器也可以继续提供服务
    2. 主 redis 中的数据和从 redis 上的数据保持实时同步,当主 redis 写入数据时通过主从复制机制会复制到两个从 redis 服务上
    3. 只有一个主 redis,可以有多个从 redis
    4. 主从复制不会阻塞 master,在同步数据时,master 可以继续处理 client 请求
    5. 一个 redis 既是主又是从
  3. 主从配置:
    1. 主 redis 配置:
      1. 无需特殊配置
    2. 从 redis 配置:
      1. 修改从 redis 服务器上的 redis.conf 文件,添加 slaveof 主 redisIP 主 redis 端口号
      2. 上面的配置说明当前该从 redis 服务器所对应的主 redis 时 192.168.101.3,端口号是 6379
    3. 部分复制说明:
      1. 从机连接主机后,会主动发起 PSYNC 命令,从机会提供 master的 runid(机器标识,随机生成的一个串) 和 offset(数据偏移量,如果 offset 主从不一致则说明数据不同步)
      2. 主机验证 runid 和 offset 是否有效,runid 相当于主机身份验证码,用来验证从机上一次连接的主机,如果 runid 验证未通过则进行全同步,如果验证通过则说明曾经同步过,根据 offset 同步部分数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值