| | |
| | | @Autowired |
| | | private JedisPool jedisPool; |
| | | |
| | | private static final int TIMEOUT = 10 * 1000; // 10秒超时时间 |
| | | private static final int SLEEP_TIME = 1000; // 1秒休眠时间 |
| | | |
| | | /** |
| | | * 向redis中存储字符串没有过期时间 |
| | |
| | | jedis.close(); |
| | | } |
| | | } |
| | | |
| | | |
| | | public boolean acquireLock(String key,String value) { |
| | | Jedis jedis = null; |
| | | try { |
| | | jedis = jedisPool.getResource(); |
| | | long start = System.currentTimeMillis(); |
| | | String[] split = key.split(";"); |
| | | for (String s : split) { |
| | | |
| | | while (true) { |
| | | // 尝试获取锁 |
| | | String result = jedis.set(s, value, "NX", "PX", TIMEOUT); |
| | | if ("OK".equals(result)) { |
| | | return true; |
| | | } |
| | | // 超时则返回失败 |
| | | if (System.currentTimeMillis() - start > TIMEOUT) { |
| | | return false; |
| | | } |
| | | // 休眠一段时间后重试 |
| | | Thread.sleep(SLEEP_TIME); |
| | | } |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | if (jedis != null) { |
| | | jedis.close(); |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | public void releaseLock(String key) { |
| | | Jedis jedis = null; |
| | | try { |
| | | jedis = jedisPool.getResource(); |
| | | jedis.del(key); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | if (jedis != null) { |
| | | jedis.close(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |