diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceFirst.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceFirst.java new file mode 100644 index 000000000..57f3d72df --- /dev/null +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceFirst.java @@ -0,0 +1,17 @@ +package com.aizuda.snailjob.server.common.allocate.client; + +import com.aizuda.snailjob.server.common.ClientLoadBalance; + +import java.util.TreeSet; + +public class ClientLoadBalanceFirst implements ClientLoadBalance { + @Override + public String route(String key, TreeSet clientAllAddressSet) { + return clientAllAddressSet.first(); + } + + @Override + public int routeType() { + return ClientLoadBalanceManager.AllocationAlgorithmEnum.FIRST.getType(); + } +} diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLRU.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLRU.java index 9c8014360..1cf47317f 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLRU.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLRU.java @@ -21,9 +21,16 @@ public class ClientLoadBalanceLRU implements ClientLoadBalance { } private ConcurrentHashMap> LRU_CACHE = new ConcurrentHashMap<>(); + private static long CACHE_VALID_TIME = 0; @Override public String route(String allocKey, TreeSet clientAllAddressSet) { + // cache clear + if (System.currentTimeMillis() > CACHE_VALID_TIME) { + LRU_CACHE.clear(); + // 每12个小时定时清理一次数据 + CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*12; + } LinkedHashMap lruItem = LRU_CACHE.get(allocKey); if (Objects.isNull(lruItem)) { lruItem = new LinkedHashMap(16, 0.75f, true) { diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLast.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLast.java new file mode 100644 index 000000000..1e978cc21 --- /dev/null +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceLast.java @@ -0,0 +1,17 @@ +package com.aizuda.snailjob.server.common.allocate.client; + +import com.aizuda.snailjob.server.common.ClientLoadBalance; + +import java.util.TreeSet; + +public class ClientLoadBalanceLast implements ClientLoadBalance { + @Override + public String route(String key, TreeSet clientAllAddressSet) { + return clientAllAddressSet.last(); + } + + @Override + public int routeType() { + return ClientLoadBalanceManager.AllocationAlgorithmEnum.LAST.getType(); + } +} diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceManager.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceManager.java index a18183aba..b8fd40d70 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceManager.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceManager.java @@ -29,7 +29,9 @@ public class ClientLoadBalanceManager { CONSISTENT_HASH(1, new ClientLoadBalanceConsistentHash(100)), RANDOM(2, new ClientLoadBalanceRandom()), LRU(3, new ClientLoadBalanceLRU(100)), - ROUND(4, new ClientLoadBalanceRound()); + ROUND(4, new ClientLoadBalanceRound()), + FIRST(5, new ClientLoadBalanceFirst()), + LAST(6, new ClientLoadBalanceLast()); private final int type; private final ClientLoadBalance clientLoadBalance; diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceRound.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceRound.java index a1650387b..aed743111 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceRound.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/allocate/client/ClientLoadBalanceRound.java @@ -16,9 +16,16 @@ public class ClientLoadBalanceRound implements ClientLoadBalance { private static final ConcurrentHashMap COUNTER = new ConcurrentHashMap<>(); private static final int THRESHOLD = Integer.MAX_VALUE - 10000; + private static long CACHE_VALID_TIME = 0; @Override public String route(final String allocKey, final TreeSet clientAllAddressSet) { + // cache clear + if (System.currentTimeMillis() > CACHE_VALID_TIME) { + COUNTER.clear(); + // 每12个小时定时清理一次数据 + CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*12; + } String[] addressArr = clientAllAddressSet.toArray(new String[0]); AtomicInteger next = COUNTER.getOrDefault(allocKey, new AtomicInteger(1)); String nextClientId = addressArr[next.get() % clientAllAddressSet.size()];