redis缓存实现分布式锁

 private static void lineLock(String lockkey) throws Exception {

        try (Jedis jedis = _JedisPoolHash.getJedis();) {

            //如果 ==0 代表存在 进入循环 等待获取锁

            while (jedis.setnx(lockkey, String.valueOf(System.currentTimeMillis() + 5000)) == 0) {

                //当前时间大于过期时间的前提下 必须大于 旧的值 并同时设置新的值如果不大于旧的值证明被其他机器并行设置了,则继续等待锁释放或过期

                if (System.currentTimeMillis() > Long.valueOf(jedis.get(lockkey)) && System.currentTimeMillis() > Long

                        .valueOf(jedis.getSet(lockkey, String.valueOf(System.currentTimeMillis() + 5000)))) {

                    break;

                }

                try {

                    Thread.sleep(250);

                } catch (InterruptedException e) {

                    e.printStackTrace();

                }

            }

        }

    }

你可能感兴趣的:(redis缓存实现分布式锁)