分布式锁
抢劵场景
分布式锁使用
集群分布式锁使用
代码展示
setnx实现分布式锁
Redis实现分布式锁主要利用Redis的setnx命令。setnx是SET if not exists(如果不存在,则 SET)的简写。
redisson给锁续期
代码实现
public void redisLock() throws InterruptedException {
//获取锁(重入锁),执行锁的名称
RLock lock=redissonClient.getLock("testlock");
//尝试获取锁,参数分别是:获取锁的最大等待时间(期间会重试),锁自动释放时间,时间单位
//boolean isLock=lock.tryLock(10,30,TimeUnit.SECONDS);10为锁等待时间,30为锁失效时间
boolean isLock = lock.tryLock(10, TimeUnit.SECONDS);
//判断是否获取成功
if(isLock){
try {
System.out.println("执行业务");
} finally {
//释放锁
lock.unlock();
}
}
}
加锁、设置过期时间等操作都是基于lua脚本完成(回答此问题时提一嘴)
利用hash结构记录线程id和重入次数
redisson实现的分布式锁-主从一致性
RedLock(红锁):不能只在一个redis实例上创建锁,应该是在多个redis实例上创建锁(n/2+ 1),避免在一个redis实例上加锁。
面试话术
主从复制、主从同步
主从复制(主从集群)
全量同步
增量同步
面试话术
哨兵模式
Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。
Redis集群脑裂
通过修改以下配置可以避免数据的丢失: