Ver código fonte

add configurable eviction policy to ExpirationMap

tags/2.0.1
Jonathan Cobb 4 anos atrás
pai
commit
e8c5caed17
2 arquivos alterados com 22 adições e 4 exclusões
  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 Ver arquivo

@@ -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 Ver arquivo

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

@Getter @Setter private ExpirationEvictionPolicy evictionPolicy = ExpirationEvictionPolicy.ctime_or_atime;
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, ExpirationEvictionPolicy evictionPolicy) {
this(val);
this.evictionPolicy = evictionPolicy;
}

@Accessors(chain=true)
private class ExpirationMapEntry<VAL> {
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> 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(); }


Carregando…
Cancelar
Salvar