高并发下的分布式锁

模板网 2021-04-14
public String deductStrck() throws InterruptedException{
    String lockKey = "product_001";    //用作一把分布式锁
    String clientId = UUID.randomUUID().toString();    //记录锁的id,防止别的线程可以解开这把锁

    try{
        //开始锁住
        //设置超时时间目的是为了防止程序突然中断而造成的死锁现象
        //锁的续命操作:时间设置为10,可以再开一个线程每3分钟检查一下看看这把锁是否存在,如果存在将过期时间再延长
        Boolean result = stringRedisTemplate.opsForValue().setIfAbsent(lockKey,clientId,10,TimeUnit.SECONDS)

        if(!result){
            return error;
        }

        //业务逻辑
        int stock Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));
        if(stock>0){
            int realStock = stock-1;
            stringRedisTemplate.opsForValue().set("stock",realStock);
            System.out.println("扣减成功,剩余库存"+realStock);
        }else{
            System.out.println("扣减失败,库存不足");
        }
    }finally{//最终要解开这把锁
        if(clientId.equals(stringRedisTemplate.opsForValue().get(lockKey))){//防止别的线程可以解开这把锁
            stringRedisTemplate.opsForValue().deleted(lockKey);
        }
    }
}

redisson提供完善的分布式锁:https://redisson.org

相关文章

  1. redis aof日志持久化

    一、aof的原理 问题: 1、每个命令重写一次aof? 2、某个key修改100次,产生100行记录,aof文件会很大,怎么解决? aof重写(简化) 二、aof的配置 appendfsync

  2. redis特殊功能

    一、慢查询 生命周期 两点说明: (1)、慢查询发生在第三阶段 (2)、客户端超时不一定慢查询,但慢查询是客户端超时的一个因素。 两个配置 ``` (1)、slowlog-max-len

  3. redis 主从复制

    一、集群的作用 1.主从备份 防止主机宕机 2.读写分离 分担master的任务 3.任务分离,如从服务器分别担任备份工作与计算工作 二、redis集群配置 Master配置 1、关闭rdb快照

  4. aof恢复与rdb服务器迁移

    一、不小心flushall或flushdb了怎么办??? 只有aof还不够。 因为如果发生重写,aof文件里就什么都没有了。 所以要及时shutdown nosave,防止aof重写!!! 然后将a

  5. python变量作用域

    在Python中并不是所有的语句块中都会产生作用域。只有当变量在Module(模块)、Class(类)、def(函数)中定义的时候,才会有作用域的概念。 需要注意的是:在if-elif-else、f

随机推荐

  1. redis aof日志持久化

    一、aof的原理 问题: 1、每个命令重写一次aof? 2、某个key修改100次,产生100行记录,aof文件会很大,怎么解决? aof重写(简化) 二、aof的配置 appendfsync

  2. redis特殊功能

    一、慢查询 生命周期 两点说明: (1)、慢查询发生在第三阶段 (2)、客户端超时不一定慢查询,但慢查询是客户端超时的一个因素。 两个配置 ``` (1)、slowlog-max-len

  3. redis 主从复制

    一、集群的作用 1.主从备份 防止主机宕机 2.读写分离 分担master的任务 3.任务分离,如从服务器分别担任备份工作与计算工作 二、redis集群配置 Master配置 1、关闭rdb快照

  4. aof恢复与rdb服务器迁移

    一、不小心flushall或flushdb了怎么办??? 只有aof还不够。 因为如果发生重写,aof文件里就什么都没有了。 所以要及时shutdown nosave,防止aof重写!!! 然后将a

  5. python变量作用域

    在Python中并不是所有的语句块中都会产生作用域。只有当变量在Module(模块)、Class(类)、def(函数)中定义的时候,才会有作用域的概念。 需要注意的是:在if-elif-else、f