分布式锁Redisson

一、SpringBoot整合Redisson

1.1 引入pom

1.2 配置类

1.3 测试类

二、模拟redis断电

启动两台实例,有一台获取锁后准备释放锁的时候,关闭服务,模拟断电,看会不会发送死锁

访问10000,加上锁后,关闭服务,模拟断电,此时,10000服务还未解锁。

访问10001,正常获取到锁

并且,TTL时间在不断变化,自动续期

三、看门狗原理

3.1 指定锁释放时间

3.2 未指定锁释放时间

四、读写锁

保证一定能读到最新的数据,修改期间,写锁是一个排他锁(互斥锁)。读锁是一个共享锁

写锁没释放,读就必须等待  

读 + 读:相当于无锁,并发读,只会在redis中记录好,所有当前的读锁。他们都会同时加锁成功

写 + 读:等待写锁释放

写 + 写:阻塞方式

读 + 写:有读锁,写也需要等待。

只要有写的存在,都必须等待

4.1 写延迟30s

4.2 读也延迟30s

五、闭锁(CountDownLatch)

比如,学校放假锁门,1班没人,2班没人了,等等,只有当5个班全部走完了,我们才可以锁大门。

六、信号量(Semaphore)

车库停车,假如有三个车位,来一辆车,就占用一个车位,走了一个释放一个车位,

可以做分布式的限流操作,限制流量,比如,我们当前系统最多能承受每秒1万的并发请求,如果,所有请求,都来我这个服务,可能会压爆,所以,可以这样做。

只要所有请求一上来,它先获取一个信号量,比如这个总量就是1万,它能获取到这个信号量,就说明就有空余的线程给它处理,它要获取不了,那就等别人给它释放了,再来处理,所以可以用来做限流操作。

视频教程

猜你喜欢

转载自blog.csdn.net/qq_38826019/article/details/115033918