分布式锁

抢劵场景


分布式锁使用

集群分布式锁使用

代码展示


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集群脑裂
通过修改以下配置可以避免数据的丢失:



面试话术

分片集群
分片集群结构

面试话术

Redis其他面试问题


1万+

被折叠的 条评论
为什么被折叠?



