feat(sj_1.2.0-beta1):增加LRU和轮询路由缓存的定期清理
This commit is contained in:
parent
e0504999ae
commit
04f8137b3f
@ -21,9 +21,16 @@ public class ClientLoadBalanceLRU implements ClientLoadBalance {
|
||||
}
|
||||
|
||||
private ConcurrentHashMap<String, LinkedHashMap<String, String>> LRU_CACHE = new ConcurrentHashMap<>();
|
||||
private static long CACHE_VALID_TIME = 0;
|
||||
|
||||
@Override
|
||||
public String route(String allocKey, TreeSet<String> clientAllAddressSet) {
|
||||
// cache clear
|
||||
if (System.currentTimeMillis() > CACHE_VALID_TIME) {
|
||||
LRU_CACHE.clear();
|
||||
// 每12个小时定时清理一次数据
|
||||
CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*12;
|
||||
}
|
||||
LinkedHashMap<String, String> lruItem = LRU_CACHE.get(allocKey);
|
||||
if (Objects.isNull(lruItem)) {
|
||||
lruItem = new LinkedHashMap<String, String>(16, 0.75f, true) {
|
||||
|
@ -16,9 +16,16 @@ public class ClientLoadBalanceRound implements ClientLoadBalance {
|
||||
|
||||
private static final ConcurrentHashMap<String, AtomicInteger> 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<String> 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()];
|
||||
|
Loading…
Reference in New Issue
Block a user