Redis 持久化、复制、性能


1、持久化Persistence:
  • Persistence: Know your options when configuring Redis' durability.
  • 两种方式:
    • 快照Snapshotting:将某一时刻的所有内存数据存储到硬盘
      • 通常rdb文件指的是快照文件(redis database)
    • 只追加文件AOF:当执行【写命令】时,将写命令追加到硬盘。
    • 两者的区别:
      • 快照方式,两次备份间隔通常超过1分钟,所以存在,丢失大量数据的可能。
      • AOF方式,必须考虑重写AOF
  • 创建快照的方式:
    • 客户端BGSAVE命令、SAVE命令
      • BGSAVE是通过fork子进程实现BG创建快照。
      • SAVE命令由当前主进程执行,阻塞所有命令。
    • save配置选项:详细配置选项,参考redis.conf文件
      • 同时满足两个条件,才会触发BGSAVE操作。例如save 60 1000
        • 表示距上次备份超过60秒、并且有超过1000次写入时,触发。
      • 可以配置多条。任意一条满足即可。
    • 当关闭服务器时,执行SAVE命令
    • 主从复制时,主服务器执行BGSAVE
  • 正常情况下,都是BGSAVE操作。除非内存不足、关闭服务器
  • 配置快照文件:
    • dbfilename选项,指定快照文件名
    • dir选项,指定快照文件目录
  • AOF方式:
    • 开启配置选项:appendonly yes
    • 文件同步频率:appendfsync
      • 推荐使用everysec。。。慎用always
      • 文件写入硬盘操作,存在缓冲区机制。
    • 重写AOF文件:
      • 不断追加命令,会造成AOF文件体积过大问题
      • BGREWRITEAOF命令,fork子进程执行重写
      • 配置选项:
        • 同时满足两个条件,才会触发重写:例如auto-aof-rewrite-percentage  100、auto-aof-rewrite-min-size  64mb
          • aof文件超过上次重写之后的文件大小的100%,并且当前文件大小超过64mb
        • 必须设置min-size,因为aof文件很小的时候,指定percentage没有意义。


2、复制Replication:
  • 主从复制模式(master-slave replication)
    • 主写,从读。初始副本,写入同步
    • 读写请求的二八原则。
    • 读写分离
    • readonly slave:一旦服务器被设置成从服务器,则变成只读服务器,拒绝写请求。
  • 单个redis实例(进程),顺序执行命令。。不存在多线程并发执行。
    • 一个redis进程,叫做redis实例,也叫做redis节点(node)
  • 复制跟从操作:即将当前服务器设置为另一台服务器的从服务器
  • 开启服务器复制跟从,两种:
    • 配置选项slaveof host port
      • 如果服务器不是以slaveof从服务器的形式启动的。默认会从快照文件初始化内存数据集。所以快照文件,类似于数据库备份文件。
    • 命令SLAVEOF host port
  • 停止服务器复制跟从:命令SLAVEOF NO ONE
  • 复制过程:
    • 初始副本:
      • 从服务器发送SYNC命令、根据配置选项选择是否拒绝读请求
      • 主服务器执行BGSAVE操作、缓冲区接收后续命令
      • 主服务器发送快照文件,随后发送缓冲区命令
      • 从服务器丢弃旧数据(注意),解析收到的文件/命令,构建数据集
    • 写入同步:
      • 初始化之后,主服务器会将每条写入命令发送给从服务器——类似AOF,发送的是写命令
  • 多个从服务器复制时:
    • 以主服务器执行BGSAVE操作为界,之前连接的从服务器,会使用相同的【快照文件】/【缓冲区命令】
      • 之后连接的从服务器,则要等到下次复制过程。
  • 主从链:
    • 从服务器也可以被其他服务器复制跟从
      • 主从复制时,当从服务器删除旧数据解析快照时,会断开跟从它的所有从服务器的连接,触发其resync重新同步
    • redis多节点(node)分担主服务器复制工作
    • 使用slaveof配置选项/SLAVEOF命令,建立树状主从链


3、在一台机器上启动多个redis实例:
  • 拷贝单独的一份redis.conf。。
  • 修改必要的配置项:
    • pidfile、port、dbfilename、logfile
  • 最佳实践:
    • 端口,在默认6379之上递增即可。
    • 文件的话,以端口为后缀,在原来目录即可。如redis6380.conf
  • 启动实例:redis-server confFile



4、验证快照文件、AOF文件:
  • check验证文件是否损坏:
    • REDIS_HOME/src目录下提供的命令行程序:redis-check-aof、redis-check-rdb
    • CRC64 checksum校验和??
  • fix修复文件:
    • redis-check-aof --fix修复aof文件。将出错的写命令及其随后的所有命令删除。
    • 快照文件(rdb)无法修复。。




1、redis集群故障转移Failover:
  • Redis Sentinel 工具,监视一系列Redis实例。并提供【自动故障转移Failover】



2、Redis性能优化:
  • Redis附带的性能测试程序redis-benchmark
    • 可以模拟指定数目的客户端,统计出常用命令每秒的执行次数
    • 常用形式:redis-benchmark -q -c 1   
      • 其中q(quiet)表示简化输出格式。c(clients)表示模拟访问的客户端数目
      • 详细用法,见命令参考
    • 实际性能比对redis-benchmark的测试结果,可以判断是否存在性能问题:
      • 单个客户端,50%~60%——不使用流水线的正常预期性能
      • 单个客户端,25%~30%或者返回错误Cannot assign requested address——问题:每个命令都开启了新的连接
        • 连接池模式,解决连接重用的性能问题:由Redis客户端提供实现。


3、常见提高性能的途经:
  • 使用合适的redis结构
  • 大体积数据压缩后放入redis
  • 流水线,提高IO性能
  • redis连接池

4、扩展读性能:
  • 利用从服务器扩展读性能
    • 默认情况下,从服务器只读。但是可以配置选项调整。
  • 利用树状复制中间层,减少主服务器的复制负载
  • 利用SSH,提供【复制】过程中的加密压缩,提升安全减少IO
    • 注意开启ssh的断线重连
    • 推荐最高开启5级压缩。可以兼顾压缩比和压缩时间上
    • 如果带宽够用,应该使用1级压缩
  • redis Sentinel(哨兵)
    • 是运行在特殊模式下的redis-server
    • 会监视一系列主服务器及其主从链上的服务器
    • 对主服务器提供故障转移,过程:
      • 一个主服务器下线,监视它的所有Sentinel经过一定计算,选出一个Sentinel,并选出一个从服务器作为新的主服务器
      • 被选出的Sentinel,迁移其他从服务器(即SLAVE OF新的主服务器,调整构建新的主从链)

5、 了解单台服务器的吞吐量很重要,根据实际负载量的波峰波谷,计算需要部署多少台服务器应对。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值