mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-10-19 10:15:26 +00:00
del[cache]: delete sizeCheckTimeAtomic
This commit is contained in:
1 parent
7fcf726371
commit
03d7996815
2 files changed
+10
-17
No files matched your search
@@ -17,7 +17,6 @@ import java.util.function.BiConsumer;
|
|||||||
public class LazyCache<K, V> {
|
public class LazyCache<K, V> {
|
||||||
|
|
||||||
private static final float DEFAULT_BACK_PRESSURE_FACTOR = 0.11f;
|
private static final float DEFAULT_BACK_PRESSURE_FACTOR = 0.11f;
|
||||||
private static final long MILLIS_MAX_SIZE_CHECK_INTERVAL = 3;
|
|
||||||
|
|
||||||
private static class CacheValue<V> {
|
private static class CacheValue<V> {
|
||||||
public volatile V value;
|
public volatile V value;
|
||||||
@@ -58,7 +57,6 @@ public class LazyCache<K, V> {
|
|||||||
private long expireCheckIntervalMillis;
|
private long expireCheckIntervalMillis;
|
||||||
private volatile long minExpireTime;
|
private volatile long minExpireTime;
|
||||||
private AtomicLong expireCheckTimeAtomic;
|
private AtomicLong expireCheckTimeAtomic;
|
||||||
private AtomicLong sizeCheckTimeAtomic;
|
|
||||||
private ConcurrentMap<K, CacheValue<V>> cacheMap;
|
private ConcurrentMap<K, CacheValue<V>> cacheMap;
|
||||||
private BiConsumer<Pair<K, V>, RemovalCause> removeListener = (pair, removalCause) -> {
|
private BiConsumer<Pair<K, V>, RemovalCause> removeListener = (pair, removalCause) -> {
|
||||||
};
|
};
|
||||||
@@ -70,7 +68,6 @@ public class LazyCache<K, V> {
|
|||||||
this.expireCheckIntervalMillis = expireCheckIntervalMillis;
|
this.expireCheckIntervalMillis = expireCheckIntervalMillis;
|
||||||
this.minExpireTime = TimeUtils.now();
|
this.minExpireTime = TimeUtils.now();
|
||||||
this.expireCheckTimeAtomic = new AtomicLong(TimeUtils.now() + expireCheckIntervalMillis);
|
this.expireCheckTimeAtomic = new AtomicLong(TimeUtils.now() + expireCheckIntervalMillis);
|
||||||
this.sizeCheckTimeAtomic = new AtomicLong(TimeUtils.now());
|
|
||||||
this.cacheMap = new ConcurrentHashMap<>(Math.max(maximumSize / 16, 512));
|
this.cacheMap = new ConcurrentHashMap<>(Math.max(maximumSize / 16, 512));
|
||||||
if (removeListener != null) {
|
if (removeListener != null) {
|
||||||
this.removeListener = removeListener;
|
this.removeListener = removeListener;
|
||||||
@@ -136,19 +133,12 @@ public class LazyCache<K, V> {
|
|||||||
// -----------------------------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------------------------
|
||||||
private void checkMaximumSize() {
|
private void checkMaximumSize() {
|
||||||
if (cacheMap.size() > backPressureSize) {
|
if (cacheMap.size() > backPressureSize) {
|
||||||
var currentTimeMillis = TimeUtils.currentTimeMillis();
|
cacheMap.entrySet()
|
||||||
var sizeCheckTime = sizeCheckTimeAtomic.get();
|
.stream()
|
||||||
if (currentTimeMillis > sizeCheckTime) {
|
.map(it -> new PairLong<>(it.getValue().expireTime, it.getKey()))
|
||||||
if (sizeCheckTimeAtomic.compareAndSet(sizeCheckTime, currentTimeMillis + MILLIS_MAX_SIZE_CHECK_INTERVAL)) {
|
.sorted((a, b) -> Long.compare(a.getKey(), b.getKey()))
|
||||||
var exceedList = cacheMap.entrySet()
|
.limit(Math.max(0, cacheMap.size() - maximumSize))
|
||||||
.stream()
|
.forEach(it -> removeForCause(it.getValue(), RemovalCause.SIZE));
|
||||||
.map(it -> new PairLong<>(it.getValue().expireTime, it.getKey()))
|
|
||||||
.sorted((a, b) -> Long.compare(a.getKey(), b.getKey()))
|
|
||||||
.limit(Math.max(0, cacheMap.size() - maximumSize))
|
|
||||||
.toList();
|
|
||||||
exceedList.forEach(it -> removeForCause(it.getValue(), RemovalCause.SIZE));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -127,7 +127,10 @@ public class LazyCacheTest {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
ThreadUtils.sleep(Long.MAX_VALUE);
|
for (int i = 0; i < 10000; i++) {
|
||||||
|
logger.info("cache size:[{}]", lazyCache.size());
|
||||||
|
ThreadUtils.sleep(1000);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user