美文网首页数据库
Redis实现分布式锁

Redis实现分布式锁

作者: 任嘉平生愿 | 来源:发表于2018-10-11 23:09 被阅读10次
public class RedisLock1 {

    @Autowired
    RedisTemplate redisTemplate;

    public boolean lock(String key, String value) {
        if (redisTemplate.opsForValue().setIfAbsent(key, value)) {
            //获得锁
            return true;
        }
        String redisValue = (String) redisTemplate.opsForValue().get(key);
        if (!StringUtils.isEmpty(redisValue) && Long.valueOf(redisValue) <= System.currentTimeMillis()) {
            //锁过期
            String oldValue = (String) redisTemplate.opsForValue().getAndSet(key, value);
            if (!StringUtils.isEmpty(oldValue) && oldValue.equals(redisValue)) {
                //防止不同的key进入
                return true;
            }
        }
        //等待锁或者不同可以key进入
        return false;
    }
}

相关文章

网友评论

    本文标题:Redis实现分布式锁

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