2-(1)、SpringBoot整合redisson实现分布式锁

1.springboot整合redission实现分布式锁(基本使用)

1.1.简介

  Redisson是架设在redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。充分的利用了Redis键值数据库提供的一系列优势,基于Java实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。

1.2.相关依赖pom文件



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.2.5.RELEASE
         
    
    com.xiaoliu
    redission
    0.0.1-SNAPSHOT
    redission
    Demo project for Spring Boot

    
        1.8
    

    
        
        
            org.springframework.boot
            spring-boot-starter
        
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.springframework.boot
            spring-boot-starter-data-redis
        
        
        
            org.redisson
            redisson-spring-boot-starter
            3.11.4
        
        
        
            com.alibaba
            fastjson
            1.2.60
        
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


1.2.配置文件 application.yml
server:
  port: 8090

spring:
  redis:
    host: 122.51.65.35
    database: 0
    timeout: 5000
1.3.编写测试类
package com.xiaoliu.redission.lock;

import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description 测试下单
 * @Author LL
 * @Date 2020-03-21 10:57
 */
@RestController
public class ShopCartController {


    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedissonClient redissonClient;

    private static final String product="MoonCake";

    @GetMapping("/submitOrder")
    public String submitOrder(){

        RLock lock = redissonClient.getLock(product);

        try {
            lock.lock();//阻塞
//            boolean b = lock.tryLock();//非阻塞
            int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));
            if (stock>0){
                //下单
                stock-=1;
                stringRedisTemplate.opsForValue().set("stock", String.valueOf(stock));
                System.out.println("扣减成功,库存stock:"+stock);

            }else {
                //没库存
                System.out.println("扣减失败,库存不足");
            }
        } finally {
            lock.unlock();//释放锁
        }
        return "end";
    }
}
1.4.测试(略)

你可能感兴趣的:(2-(1)、SpringBoot整合redisson实现分布式锁)