Redisson分布式锁
# Redisson分布式锁
导入依赖,注入redissonClient对象,通过该对象来使用各种redis分布式锁。
# 可重入锁
场景:A方法调用B方法,A和B都要获取同一把锁。
lock()方法是阻塞式等待方法,获取不到会一直等待,直到获取到锁开始执行业务。不需要自旋锁重复自调用。
内置看门狗自动续上锁的TTL,防止业务执行时间过长;如果lock()自己指定过期时间则看门狗失效。
public void test(){
RLock lock=redissonClient.getLock("my-lock");//名字相同就是同一把锁
lock.lock();//加锁,并默认添加TTL
// lock/lock(10,TimeUnit.SECONDS);
try{
//执行业务
}catch(Exception e){
}finally{
lock.unlock();//释放锁
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 读写锁
向redis中写数据之前添加写锁,在修改数据过程中它是一个排他锁,只能存在一个写锁;读数据之前添加读锁,它是一个共享锁,写锁没释放就必须等待。
# 闭锁
redissonClient.getCountDownLatch("door"),当分布式闭锁都调用countDown()达到设置次数后,主锁才执行await后业务。
# 信号量
只有当redis中的信号量value大于0,才能够获取信号量。
缓存数据和数据库一致性问题:数据库写后删缓存模式。实时性一致性要求高的数据就不应该读redis,直接查数据库。缓存只适合于最终一致性,给数据添加过期时间TTL,保证拿到当前最新数据即可。
编辑 (opens new window)
上次更新: 2023/12/15, 15:49:57