package org.searchisko.api.cache;
import java.util.HashMap;
import java.util.Map;
/**
* Base for expiring cache with <code>String</code> keys.
*
* @param <T> the type of value stored in the cache
*
* @author Vlastimil Elias (velias at redhat dot com)
*/
public abstract class ExpiringCacheBase<T> implements ICache<T> {
/**
* Time to Live for cache [ms].
*/
protected long ttl = 30 * 1000;
private Map<String, CacheItem<T>> cache = new HashMap<>();
@Override
public T get(String key) {
CacheItem<T> ci;
synchronized (cache) {
ci = cache.get(key);
}
if (ci != null && ci.validTo > System.currentTimeMillis()) {
return ci.value;
}
return null;
}
@Override
public void put(String key, T value) {
CacheItem<T> ci = new CacheItem<>();
ci.value = value;
ci.validTo = System.currentTimeMillis() + ttl;
synchronized (cache) {
cache.put(key, ci);
}
}
@Override
public void flush() {
synchronized (cache) {
cache.clear();
}
}
private static class CacheItem<T> {
protected long validTo;
protected T value;
}
}