springboot2 redis 及 redission 分布式锁(分布式事务)

本文探讨了在SpringBoot2环境中,如何利用Redis和Redisson解决分布式锁的问题,以应对分布式场景下的并发操作。文章分析了纯Redis分布式锁的挑战,如超时、异常处理等问题,并介绍了Redisson的看门狗机制和自动续期功能,以避免锁超时和竞争状态。此外,还提到了Redisson的lock()方法在提高用户体验方面的优势。
摘要由CSDN通过智能技术生成

参考:https://www.fengyunxiao.cn/

springboot 在单机模式下很好解决抢票,秒杀等需要一个一个执行的业务,可以使用jvm自带的synchronized进行上锁,避免抢了同一个。分布式场景下(比如在多个服务器同时部署了多个项目)使用synchronized关键字不能保证业务不出问题,需要使用中心化的解决方法,如redis。

方法1:单纯使用 redis 作为分布式锁,比较简单,但是存在几个很难完美解决的问题。

// 获取原子锁(setnx),同时设置超时时间,该方法是原子性的。
public boolean getLock(String key, String value) {
    Boolean result = stringRedisTemplate.boundValueOps(key).setIfAbsent(value, 30, TimeUnit.SECONDS);
    return result == null ? false : result;
}

// 删除原子锁,根据key和value同时删除,非原子性。最好使用lua,保证原子性,因为我没有使用过lua,所以先用非原子性的。后期更新。
public void deleteLock(String key, String value) {
    String s = stringRedisTemplate.boundValueOps(key).get();
    if (value!= null && value.equals(s)) {
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值