016 Redis 의 사용 처리 병행,분산 잠 금

1412 단어 SpringBoot
redis 를 사용 하면 1 초 에 십 몇 만 의 병행 을 지원 할 수 있 습 니 다.
@Component
@Slf4j
public class RedisLLock {

    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     *    
     * @param key
     * @param value
     * @return
     */
    public  boolean lock(String key,String value){
        if(redisTemplate.opsForValue().setIfAbsent(key, value)){
            return  true;
        }
        String currentValue =redisTemplate.opsForValue().get(key);
        //     
        if (!StringUtils.isEmpty(currentValue)
                && Long.parseLong(currentValue)

동작:
private  static final   Integer TIMEOUT = 10*1000;

@Autowired
private  RedisLLock redisLLock;
    
@Transactional
public OrderDTO buy(OrderDTO orderDTO) {

    //  
    long time = System.currentTimeMillis()+ TIMEOUT;
    if (!redisLLock.lock(orderDTO.getOrderId(),String.valueOf(time))){
        throw  new SellException(101,"  ,      ~~");
    }
    //     

    //  
    redisLLock.unlock(orderDTO.getOrderId(),String.valueOf(time));    
    
}    

좋은 웹페이지 즐겨찾기