redis 集群、分布式锁

1. redis 主从同步

数据可以从主服务器向任意数量的从服务器上同步

全量复制:Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份 

完成上面几个步骤后就完成了从服务器数据初始化的所有操作,从服务器此时可以接收来自用户的读请求。 

增量复制:

配置:只要在从节点里面配置上Master节点的ip地址。那么当从节点进行restart的时候 .会自动发起主从同步

2. sentien「哨兵」模式

Redis的主从复制下,一旦主节点由于故障不能提供服务,需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点地址,对于很多应用场景这种故障处理的方法是无法接受的。但是Redis从2.8开始正式提供了Redis Sentinel(哨兵)架构来解决这个问题

1. 定时监控

2. 主管下线

3. 客观下线

4. 领导者选举

 

3. cluster集群模式

  • 当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力

虚拟槽分区(巧妙使用哈希空间,使用分散度良好的哈希函数把所有数据映射到一个固定范围的整数集合中,整数定义为槽(slot),这个范围一般远大于节点数,Redis Cluster使用0-16383)

 redis-cluster投票:容错

redis-cluster投票:容错

  1. 什么时候整个集群不可用(cluster_state:fail)?

    • 如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态. 
      • redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.
    • 如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态.

4. 分布式锁

细说Redis分布式锁🔒 - 掘金

1. setnx

SET key value [EX seconds|PX milliseconds] [NX|XX] [KEEPTTL]

setnx需要一系列保障措施来进行下去。超时,挂掉,删除等会

2. redisson

Redisson是java的redis客户端之一。

Redisson普通的锁实现源码主要是RedissonLock这个类。源码中加锁/释放锁操作都是用lua脚本完成的,封装的非常完善,开箱即用

的确用起来像jdk的ReentrantLock一样丝滑,那么redisson实现的已经这么完善,redLock又是什么?

3. redLock 红锁

红锁并非是一个工具,而是redis官方提出的一种分布式锁的算法

回到上面那张简陋的图片,红锁算法认为,只要(N/2) + 1个节点加锁成功,那么就认为获取了锁, 解锁时将所有实例解锁。 流程为:

  1. 顺序向五个节点请求加锁
  2. 根据一定的超时时间来推断是不是跳过该节点
  3. 三个节点加锁成功并且花费时间小于锁的有效期
  4. 认定加锁成功

5. 可重入锁

可重入锁详解(什么是可重入)_w8y56f的专栏-优快云博客_可重入锁 

什么是 “可重入”,可重入就是说某个线程已经获得某个锁,可以再次获取锁而不会出现死锁

可重入锁有

  • synchronized
  • ReentrantLock

ReentrantLock 和 synchronized 不一样,需要手动释放锁,所以使用 ReentrantLock的时候一定要手动释放锁,并且加锁次数和释放次数要一样【否则会出现死锁】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值