|
@@ -19,6 +19,8 @@ package org.hsweb.concureent.cache.monitor;
|
|
|
import org.hsweb.web.core.cache.monitor.MonitorCache;
|
|
|
import org.springframework.cache.concurrent.ConcurrentMapCache;
|
|
|
|
|
|
+import java.lang.ref.Reference;
|
|
|
+import java.lang.ref.SoftReference;
|
|
|
import java.util.Set;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
@@ -29,7 +31,7 @@ public class SimpleMonitorCache extends ConcurrentMapCache implements MonitorCac
|
|
|
private final AtomicInteger putTimes = new AtomicInteger(0);
|
|
|
|
|
|
public SimpleMonitorCache(String name) {
|
|
|
- super(name,false);
|
|
|
+ super(name, false);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -52,6 +54,17 @@ public class SimpleMonitorCache extends ConcurrentMapCache implements MonitorCac
|
|
|
return hitTimes.get();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ protected Object lookup(Object key) {
|
|
|
+ Object value = super.lookup(key);
|
|
|
+ if (value != null && value instanceof Reference) {
|
|
|
+ Reference reference = (Reference) value;
|
|
|
+ if (reference != null) return reference.get();
|
|
|
+ evict(key);
|
|
|
+ }
|
|
|
+ return value;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public ValueWrapper get(Object key) {
|
|
|
ValueWrapper wrapper = super.get(key);
|
|
@@ -72,22 +85,27 @@ public class SimpleMonitorCache extends ConcurrentMapCache implements MonitorCac
|
|
|
return value;
|
|
|
}
|
|
|
|
|
|
+ protected Object buildValue(Object value) {
|
|
|
+ return new SoftReference(value);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void put(Object key, Object value) {
|
|
|
if (key == null || value == null) return;
|
|
|
putTimes.addAndGet(1);
|
|
|
- super.put(key, value);
|
|
|
+ super.put(key, buildValue(value));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public ValueWrapper putIfAbsent(Object key, Object value) {
|
|
|
if (key == null || value == null) return null;
|
|
|
putTimes.addAndGet(1);
|
|
|
- return super.putIfAbsent(key, value);
|
|
|
+ return super.putIfAbsent(key, buildValue(value));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public long getPutTimes() {
|
|
|
return putTimes.get();
|
|
|
}
|
|
|
+
|
|
|
}
|