美文网首页
基于redis的分布式锁实现

基于redis的分布式锁实现

作者: 福杯满溢 | 来源:发表于2018-07-28 17:51 被阅读0次

    版本一

    public Boolean lock(String key, Long value) {
        ValueOperations valueOperations = redisTemplate.opsForValue();
        if (valueOperations.setIfAbsent(key, value)) {
            return true;
        }
        Long current = (Long) valueOperations.get(key);
        if (current != null && current < System.currentTimeMillis()) {
            // time out
            Long old = (Long) valueOperations.getAndSet(key, value);
            if (old.equals(current)) {
                return true;
            }
            return false;
        }
        return false;
    }
    解说:
    1: valueOperations.setIfAbsent(key, value) 对应redis的setnx,原子操作。
    2: if (current != null && current < System.currentTimeMillis()) 该判断用于判断上一个锁是否超时,如果条件满足,意味着已经超时,可以尝试获取了。
    3: Long old = (Long) valueOperations.getAndSet(key, value); 这个操作就是设置新值,获取旧值。
    4: if (old.equals(current)) 如果条件满足,意味着没有其他抢资源,可以获取。
    

    相关文章

      网友评论

          本文标题:基于redis的分布式锁实现

          本文链接:https://www.haomeiwen.com/subject/zgnomftx.html