redis锁在并发下造成的问题

    public void test() throws Exception {
        boolean lock = redisService.lock("key_lock", 1, 2);
        while (!lock) {
            lock = redisService.lock("key_lock", 1, 2);
        }
        long startTime = System.currentTimeMillis();
        System.out.println((startTime)/1000%60);
        redisService.deleteLock("key_lock");
    }

在并发的环境下,deleteLock释放锁时,假设A线程在执行业务逻辑时,锁已经失效,此时B线程获取锁,
同时C线程在等待,然后A线程的业务逻辑已经执行完成释放锁,然而这是A线程的锁早就过期了,这个时候释放的是B线程的锁,导致C线程也进来了。
解决方案:
可根据实际业务,比如根据存入的value,当value是自己的值时才去释放锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值