数据库

Redis实现分布式锁

2018-10-11  本文已影响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;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读