Redis

33 阅读4分钟

Redis


  • Redis为什么这么快

    • 单线程、 IO复用
  • 因为 Redis 是基于内存的操作,CPU 不会成为 Redis 的瓶颈,而最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方案了。

  • Redis的过期策略

    redis如何设置过期时间 :expire key time 字符串有独有的设置过期时间的方式 setex(key, int time ,value)

    • 定时删除

      设置过期时间的同时设置一个定时器,定时的去删除这个数据

    • 惰性删除

      对某个数据进行操作时,判断key是否过期,过期即删除它,在进行对应的命令处理

    • 定期删除

      每隔一段时间定时的进行key检查,如果过期则删除

    redis默认使用 惰性删除 + 定期删除

  • 持久化文件对过期key的处理

    • 过期key是不会写入持久化文件的,同时数据恢复时也会进行过期严重
  • redis的淘汰机制

    1. 默认机制:不再接受写入请求,直接返回错误
    2. 从所有的key中随机删除部分数据
    3. 从过期的key中随机删除部分数据
    4. 删除剩余过期时间最短的数据
  • Redis持久化的优劣

    • RDB:以快照的方式将数据写入二进制文件进行持久化保存

      自动触发条件:900s内数据发生过至少一次的变化、300s内数据发生过至少10次的变化、60s内数据发生过至少10000次的变化

      fork一个子线程进行持久化的操作,不影响主线程的业务操作fork子线程的过程中,会阻塞主线程

      文件紧凑,全量备份,适合数据备份和容灾恢复

      支持异步操作,不需要主线程进行IO操作,影响效率

      RDB在恢复大数据集时速度快于AOF

      在持久化期间修改的数据不会被保存,存在数据丢失的风险啊

    • AOF

      将每一个写命令都追加到AOF文件中 触发方式:每次操作都会触发、每秒触发一次、从不触发

      最大可能的降低数据丢失的风险

      文件过大时,进行重写操作时,不会影响客户端的读写

      适合做灾难性的误删数据的紧急恢复

      数据量大的情况下,数据恢复对于RDB来说性能较低

  • redis的集群模式

    • 主从模式

      • 一主多从,一主一从、级联结构

        一主多从多用于读写分离,数据的复制可能会产生性能瓶颈,可采用多层的级联结构分担数据复制的压力(但会影响数据的实时性)

        • redis的主从数据同步策略

          全量复制 和 增量复制 一主多从 模式下,当多个slave节点断线重启后,会同时去链接master节点,导致master节点的IO突增,从而发生宕机的情况

          全量复制
          1、slave连接master节点,发送SYNC命令
          2、master节点收到后,执行bgsave命令,生成RDB文件,在此期间收到命令通过缓冲区记录
          3、将RDB文件发送给slave,在发送过程中可继续执行写命令
          4、slave收到快照文件后丢弃所有旧数据,进行RDB恢复
          5、master发送完毕后,接着发送缓冲区的写命令
          6、slave恢复快照文件完成后,开始接收缓冲区命令,进行写入操作
          7、slave在执行完以上操作后,开始接受用户的读命令
          ​
          增量复制
          增量复制就是在slave节点完成全量复制的数据初始化操作,开始正常工作之后。master会将每次的写操作都同步至slave节点执行,保持数据的一致性
          
    • 哨兵模式

      哨兵模式是为了应对当mster节点宕机导致不可预测的异常发生而出现的

      • 作用
      1、监控所有的redis节点是否在正常工作
      2、当mster节点宕机后,从slave节点中通过投票机制选出新的master节点
      ​
      * 多个哨兵之间也会进行相互的监控
      
      • 任务
      监控:监控master节点与slave节点之间的连接是否正常
      通知:当监控的某个redis出现异常时,通过API向管理员或其他应用程序发送通知
      故障转移:当某个master出现问题后,哨兵会根据机制从slave中设定一个新的master,并让其余的slave节点都去连接新的master节点,当客户端试图连接故障的master节点时,也会返回一个新的master节点地址,让客户端去链接
      
      • 缺点

        在master的重新选举过程中,整个服务集群处于不可用状态

\