一起搞一下Redis集群

为什么选择集群

  1. 性能
  2. 扩展
  3. 可用性 高可用

1. 主从复制

脱离集群 slaveof no one

加入集群 slaveof ip port

查看集群信息 info replication

从节点不可以写数据。

  1. 加入集群
  2. 从节点中定时任务,1s执行一次,确认socket连接
  3. 首次全量复制,master bgsave生成rdb(repli-timeout 60s),发送给slave,缓冲区
  4. 命令传播

合并数据包,减少带宽,增加了延迟。

缺点

  • 无法自动切换master

2. Sentinel 哨兵 提供高可用 2.8+

sentinel中每个节点都是平等的

  1. 主节点连接超时 默认30s
  2. 标记下线 – 主观下线
  3. 客观下线 – 超过半数
  4. 选举 – 遍历所有节点,根据master名称返回主节点

3. redis cluster

三主三从,在服务端实现分片

  1. 启动六个服务
  2. client-cli --cluster
  3. redis提供预制方案

Raft算法

  1. 先到先得
  2. 少数服从多数

150ms -300ms
收到leader发送的心跳包,则重新计时,防止无为选举

分布数据方案

  1. hash(key)% n
  2. 一致性hash,hash环,2^32-1, 虚拟节点解决数据倾斜,使数据分布均匀
  3. 虚拟槽slot,key经过crc16算法,然后取模
    • cluster keyslot bobo
    • set a{bo}a 1 指定到同一个节点
    • redis-cli -c -p 6379 -c 集群
    • 客户端需要支持 smart client
    • 集成replication,sentinel

客户端通信原理

TCP ,默认6379

pipeline

分布式锁

  • 互斥
  • 死锁
  • 只有自己到锁才能释放

数据一致性

  1. 先更新数据库,再删redis
  2. 先删除redis,再删除数据库
    • 多个线程并发导致数据不一致
    • 延时双删 更新后删除redis

热点数据发现

  • monitor

缓存雪崩

热点数据同时失效,导致数据库压力太大

  • random
  • 永不过期
  • 预更新

缓存穿透

布隆过滤器

  1. 离线数据加载到布隆过滤器
  2. 布隆过滤器查询
  3. 过滤器中不存在,直接返回
  4. 过滤器中存在,cache不存在,请求数据库
  5. 数据库返回结果

你可能感兴趣的:(Redis,redis,缓存)