zoukankan      html  css  js  c++  java
  • redis 重试锁

    @Value("${get.lock.max.time}")
    private Integer getLockMax;

    @Value("${get.lock.sleep}")
    private Long getLockSleep;

    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    /**
    * @desc : 加锁
    * lockKey:加锁的key retryTimes:重试次数 expireTime:加锁有效期(单位:毫秒)
    * @create: 2021/4/1 14:54:00
    **/
    @Override
    public void addLock(String lockKey, Integer retryTimes,Long expireTime) {
    if (retryTimes.equals(getLockMax)) {
    log.warn("达到最大重试次数:{},获取锁失败", getLockMax);
    throw new BusinessException(CloudWalkErrorCodeEnum.PET_GET_LOCK_ERROR);
    }
    log.info("开始加锁:{},retryTime:{}", lockKey, retryTimes);
    Long increment = this.increment(lockKey, 1L, expireTime);
    if (increment > 1) {
    try {
    Thread.sleep(getLockSleep);
    } catch (InterruptedException e) {
    log.error("休眠异常:{}", e);
    Thread.currentThread().interrupt();
    }
    retryTimes++;
    log.info("加锁失败", retryTimes);
    addLock(lockKey, retryTimes,expireTime);
    } else {
    log.info("加锁成功");
    }

    }


    /**
    * @desc : 释放锁
    * @create: 2021/4/1 14:54:00
    **/
    @Override
    public void unLock(String lockKey) {
    log.info("释放锁:{}", lockKey);
    this.delete(lockKey);
    log.info("释放锁成功");
    }


    @Override
    public Long increment(String key, long delta, Long expireTime) {
    log.info("increment key: {}", key);
    Long current = redisTemplate.opsForValue().increment(key, delta);
    if(expireTime != null) {
    expire(key, expireTime);
    }
    return current;
    }

    @Override
    public void delete(String key) {
    log.info("delete key: {}", key);
    redisTemplate.delete(key);
    }
  • 相关阅读:
    使div浮动层显示在Select组件上面
    JS中,执行字符串的函数
    如何让Web自定义控件(WebCustomControl)能够被 验证控件 验证
    WIN 2003 中 IIS MIME 问题,导致FLV无法播放
    Response.ContentType的所有類型
    XPath语法
    如何加快页面加载速度
    网页页面实现自动刷新的3种代码
    div 内table 居中
    C#中调用Windows API的要点
  • 原文地址:https://www.cnblogs.com/maohuidong/p/14606529.html
Copyright © 2011-2022 走看看