Redis指南!大佬手把手教你实现Redis分布式锁!

本文详细讲解如何使用Redis实现分布式锁,通过set key value [EX seconds][PX milliseconds][NX|XX]命令,避免并发问题。文中提供代码示例,并讨论了加锁、释放锁的正确做法,以及测试过程。
摘要由CSDN通过智能技术生成

Redis怎么实现分布式锁?

  1. 利用setnx+expire命令 (错误的做法)

  2. 使用Lua脚本(包含setnx和expire两条指令,但本文不涉及)

  3. 使用 set key value [EX seconds][PX milliseconds][NX|XX] 命令 (正确做法,本文代码案例使用此方式)

    但是这样依然有问题,因为如果超时时长设置的不够长,在本次加锁后的业务操作耗时较长还未进行完毕,锁到期释放了,就会出现其他线程进行加锁操作,加锁完之后,之前的线程执行完毕,进行释放锁的操作,释放了其他线程的锁,就会出现问题,下面代码简单的使用当前线程的线程名作为value值,在解锁的时候进行比对

上代码!!!!!!

/**
     * 允许丢弃,得到redis锁
     *
     * @param lockKey        锁定键
     * @param expireInSecond 过期时间
     * @return {@link String}
     */
    public String getRedisLock(final String lockKey, final int expireInSecond) throws InterruptedException {
        if (StringUtils.isEmpty(lockKey)) {
            throw new DistributionLockException("key is empty!");
        }

        if (expireInSecond < 0) {
            throw new DistributionLockException("expireInSecond must be bigger than 0");
        }

        try {
            for (int i = 0; i < retryCount; i++) {
                Boolean absent = redisTemplate.opsForValue().setIf
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值