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

    科技2022-07-11  95

    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、模拟微服务异常中断,会不会死锁

    Processed: 0.009, SQL: 8