分布式锁



锁-时序问题

要保证原子操作必须在同一把锁里面,不然会出现不一致的问题

image-20210316185225343

本地锁模拟分布式锁

image-20210316185442584

image-20210316185524814

分布式锁基本原理

image-20210316190024255

实现

阶段一

image-20210316191354731

阶段二

image-20210316191750843

阶段三

加锁要做成原子性,也就是加锁和设置过期时间要是原子性

image-20210316191811200

阶段四

image-20210316192655337

最终

image-20210316192825519

redisson

现在的企业开发一般采用redisson实现分布式锁,分布式对象等功能功能框架

引入依赖

		<dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson</artifactId>
            <version>3.12.5</version>
        </dependency>

配置redis

@Configuration
public class MyredissonConfig {
    /**
     * 所有对Redisson的使用,都是通过RedissonClient对象
     * @return
     */
    @Bean(destroyMethod = "shutdown")
    public RedissonClient redisson(){
        //1、创建配置
        Config config = new Config();
        config.useSingleServer().setAddress("redis://120.27.210.185:6379");

        //2、根据Config创建RedissonClient实例
        RedissonClient redissonClient = Redisson.create(config);
        return redissonClient;
    }
}

实现测试

阻塞式等待就是先原地等待,自旋式就是一直调用自己,直到调用成功。

redisson即使解锁代码没有执行,也不会出现死锁,因为默认设置的加锁过期时间都是三十秒,如果加锁的业务还没有完成,那么锁就会自动续期,这也就是看门狗机制

image-20210316201115890

当然也可以自己设置过期时间,但是要注意自动解锁时间一定要大于业务时间,因为一但自己设置了过期时间,就没有用看门狗机制,就不会自动续期

image-20210316201813667

image-20210316202548335

每隔十秒,就会自动续期到默认的三十秒时间

最佳实战还是采用自定义过期时间

读写锁

image-20210316204841573

信号量

信号量就相当于停车场,每来一辆车就增加一个信号量,可以设置信号量最大值,在项目中,信号量可以用在限流。

image-20210316205424511

闭锁

门卫锁门,等所有人都走了,才可以关门

image-20210316205710943

项目实现

由于锁的名字就决定了锁,所以锁的命名细度越高越好

image-20210316210928137

缓存一致性

双写模式

image-20210316211034348

失效模式

image-20210316211337564

image-20210316211815612

image-20210316212024742

总结

具体使用什么模式,或者什么锁这是要根据需求去分析的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值