springboot微服务实战:Redisson 分布式锁场景:模拟并发、异常中断会不会死锁

Redisson 分布式锁

阻塞式等待 ( 续长30s )
1) 锁的自动续期,如果业务超长,运行期间自动给锁续上新的30s
2) 加锁的业务只要运行完成,就不会给当前锁续期,即使不手动解锁,锁默认在30s以后自动删除

@Controller
public class IndexController {
    @Autowired
    RedissonClient redisson;

    @ResponseBody
    @GetMapping("/hello")
    public String hello() {
        // 1、获得一把锁,只要锁的名字一样,就是同一把锁
        RLock lock = redisson.getLock("my-lock");

        // 2、加锁 (重要1)
        lock.lock(); // 阻塞式等待

        // 1) 锁的自动续期,如果业务超长,运行期间自动给锁续上新的30s
        // 2) 加锁的业务只要运行完成,就不会给当前锁续期,即使不手动解锁,锁默认在30s以后自动删除

        try {
            System.out.println("加锁成功,z之行业务。。。"+Thread.currentThread().getId());
            Thread.sleep(15000);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 3、解锁 (重要2)
            lock.unlock();
            // 问题:将解锁代码没有之行,redisson 会不会出现死锁
            System.out.println("释放锁。。。"+Thread.currentThread().getId());
        }
        return "hello";
    }
}

模拟 分布式锁

1、开启2个相同的微服务

在这里插入图片描述

2、模拟并发

开启2个浏览器,同时请求微服务

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、模拟微服务异常中断,会不会死锁

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值