From a729c1da8993a972e919ee012935972cc0fab409 Mon Sep 17 00:00:00 2001 From: wangkang Date: Tue, 5 Sep 2017 10:41:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0snowflake=E7=9A=84datacenterI?= =?UTF-8?q?d=E5=92=8CworkerId=E7=9A=84ID=E5=88=86=E9=85=8D=E7=AD=96?= =?UTF-8?q?=E7=95=A5,=E5=88=A9=E7=94=A8redis=E7=9A=84=E5=8E=9F=E5=AD=90?= =?UTF-8?q?=E9=94=81=E7=89=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/itkk/udf/id/IdWorkerInit.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorkerInit.java b/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorkerInit.java index d24522e..42fb085 100644 --- a/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorkerInit.java +++ b/udf-starter-id/src/main/java/org/itkk/udf/id/IdWorkerInit.java @@ -115,7 +115,7 @@ public class IdWorkerInit { * 初始化(默认实例化) */ @PostConstruct - public synchronized void init() { + public synchronized void init() { // NOSONAR //开始处理 boolean result = redisTemplate.execute((RedisCallback) connection -> { try { @@ -133,6 +133,18 @@ public class IdWorkerInit { String key = cacheRedisProperties.getPrefix().concat(SPLIT).concat(CACHE_NAME).concat(SPLIT).concat(Integer.toString(i)).concat(SPLIT).concat(Integer.toString(j)); //创建锁 lock = connection.setNX(serializer.serialize(key), jdkSerializationRedisSerializer.serialize(this.cacheValue)); + //获取失败 + if (!lock) { + //获得数据 + CacheValue currentCacheValue = (CacheValue) jdkSerializationRedisSerializer.deserialize(connection.get(serializer.serialize(key))); + //比对host和port,是否跟当前server一致,如果一致的话,证明是可以获取锁的 + if (this.cacheValue.getHost().equals(currentCacheValue.getHost()) && this.cacheValue.getPort() == currentCacheValue.getPort()) { + //更新本地变量 + this.cacheValue = currentCacheValue; + //更改锁定状态 + lock = true; + } + } //获得锁成功 if (lock) { //设置超时时间