Browse Source

add configurable eviction policy to ExpirationMap

tags/2.0.1
Jonathan Cobb 5 years ago
parent
commit
e8c5caed17
2 changed files with 22 additions and 4 deletions
  1. +7
    -0
      src/main/java/org/cobbzilla/util/collection/ExpirationEvictionPolicy.java
  2. +15
    -4
      src/main/java/org/cobbzilla/util/collection/ExpirationMap.java

+ 7
- 0
src/main/java/org/cobbzilla/util/collection/ExpirationEvictionPolicy.java View File

@@ -0,0 +1,7 @@
package org.cobbzilla.util.collection;

public enum ExpirationEvictionPolicy {

ctime_or_atime, ctime, atime

}

+ 15
- 4
src/main/java/org/cobbzilla/util/collection/ExpirationMap.java View File

@@ -32,13 +32,18 @@ public class ExpirationMap<K, V> implements Map<K, V> {
return this; return this;
} }


@Getter @Setter private ExpirationEvictionPolicy evictionPolicy = ExpirationEvictionPolicy.ctime_or_atime;
private long lastCleaned = 0; private long lastCleaned = 0;


public ExpirationMap() {
this.map = new ConcurrentHashMap<>();
}
public ExpirationMap() { this.map = new ConcurrentHashMap<>(); }

public ExpirationMap(long val) { this(); setExpirations(val); } public ExpirationMap(long val) { this(); setExpirations(val); }


public ExpirationMap(long val, ExpirationEvictionPolicy evictionPolicy) {
this(val);
this.evictionPolicy = evictionPolicy;
}

@Accessors(chain=true) @Accessors(chain=true)
private class ExpirationMapEntry<VAL> { private class ExpirationMapEntry<VAL> {
public final VAL value; public final VAL value;
@@ -47,7 +52,13 @@ public class ExpirationMap<K, V> implements Map<K, V> {
public ExpirationMapEntry(VAL value) { this.value = value; } public ExpirationMapEntry(VAL value) { this.value = value; }


public ExpirationMapEntry<VAL> touch() { atime = now(); return this; } public ExpirationMapEntry<VAL> touch() { atime = now(); return this; }
public boolean expired() { return now() > ctime+maxExpiration || now() > atime+expiration; }
public boolean expired() {
switch (evictionPolicy) {
case ctime_or_atime: default: return now() > ctime+maxExpiration || now() > atime+expiration;
case atime: return now() > atime+expiration;
case ctime: return now() > ctime+expiration;
}
}
} }


@Override public int size() { return map.size(); } @Override public int size() { return map.size(); }


Loading…
Cancel
Save