zoukankan      html  css  js  c++  java
  • 分布式锁

    一: 使用redis:

        @PostMapping("/v1/getLock2")
        public  BaseResponse  getLock2(@RequestBody GxyTeacherInfoDto dto) throws  Exception{
            String key = "product_001";
            String lockvalue = UUID.randomUUID().toString();
            Boolean bool = stringRedisTemplate.opsForValue().setIfAbsent(key,lockvalue,10,TimeUnit.SECONDS);
            if(!bool) {
                System.out.println("err");
                return BaseResponse.error();
            }
            try {
                int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));
                if (stock > 0) {
                    int realStock = stock - 1;
                    stringRedisTemplate.opsForValue().set("stock",realStock+"");
                    System.out.println("售卖成功,剩余" + realStock);
                    return BaseResponse.ok();
                } else {
                    System.out.println("err2");
                    return BaseResponse.error();
                }
            } finally {
                if(lockvalue.equals(stringRedisTemplate.opsForValue().get(key))) {
                    stringRedisTemplate.delete(key);
                }
            }
    
    
        }

    二: 使用Redisson:

    @Bean
    public Redisson redisson(){
        Config config = new Config();
        config.useSingleServer().setAddress("redis://IP:port");
        return (Redisson)Redisson.create(config);
    }

        @PostMapping("/v1/getLock3")
        public  BaseResponse  getLock3(@RequestBody GxyTeacherInfoDto dto) throws  Exception{
            String lockKey = "product_001";
            RLock redissonLock = redisson.getLock(lockKey);
            try {
                int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));
                if (stock > 0) {
                    int realStock = stock - 1;
                    stringRedisTemplate.opsForValue().set("stock",realStock+"");
                    System.out.println("售卖成功,剩余" + realStock);
                    return BaseResponse.ok();
                } else {
                    System.out.println("err2");
                    return BaseResponse.error();
                }
            } finally {
                redissonLock.unlock();
            }
        }
    
    
  • 相关阅读:
    状态模式
    maven-war-plugin 插件 web.xml 缺失时忽略
    Java远程方法协议(JRMP)
    Java Singleton的3种实现方式
    浅谈分布式消息技术 Kafka
    浅谈分布式事务
    J2EE开发时的包命名规则,养成良好的开发习惯
    使用Dom4j创建xml文档
    Java HttpClient Basic Credential 认证
    Spring MVC的Post请求参数中文乱码的原因&处理
  • 原文地址:https://www.cnblogs.com/z360519549/p/12499050.html
Copyright © 2011-2022 走看看