edu.internet2.middleware.grouperClient.util
Class ExpirableCache<K,V>

java.lang.Object
  extended by edu.internet2.middleware.grouperClient.util.ExpirableCache<K,V>
Type Parameters:
K - key type
V - value type
All Implemented Interfaces:
java.io.Serializable

public class ExpirableCache<K,V>
extends java.lang.Object
implements java.io.Serializable

This is like a map, but the setters also take an expire time which will mean the items in the cache will be automatically deleted. Also, every so often (e.g. 2 minutes) all items are checked for expiration. If no timetolive is set, it will default to 1 day. The max time to live is one day. This is synchronized so that all access is safe.

Note, evictions are check for periodically, but only when the map is accessed (and even then only every few minutes). so you can check for evictions externally, or clear the map if you are done with it.

Version:
$Id: ExpirableCache.java,v 1.1 2008-11-27 14:25:50 mchyzer Exp $
Author:
mchyzer
See Also:
Serialized Form

Nested Class Summary
static class ExpirableCache.ExpirableCacheUnit
          unit of time for expirable cache
 
Constructor Summary
ExpirableCache()
           
ExpirableCache(ExpirableCache.ExpirableCacheUnit expirableCacheUnit, int defaultTimeToLive)
           
ExpirableCache(int defaultTimeToLiveInMinutes)
           
 
Method Summary
 void checkForEvictions(boolean onlyCheckIfNeeded)
          check and remove elements that are stale
 void clear()
          delete the cache
static void clearAll()
          clear out all caches everywhere (session, request, context, etc)
 V get(K key)
          get a value or null if not there or expired this will check for eviction, and evict if evictable
 int getCacheEvictions()
          number of items evicted from cache
 int getCacheHits()
          number of items successfully retrieved from cache
 int getCacheInserts()
          number of items inserted into the cache
 long getDefaultTimeToLiveInMillis()
          expose the length of cache
 void put(K key, V value)
          put a value into the cache, accept the default time to live for this cache
 void put(K key, V value, int timeToLiveInMinutes)
          put a value into the cache, accept the default time to live for this cache
 int size(boolean evictEvictables)
          number of elements in map (and check for
static java.lang.String staticToString()
          string representation of cache
 java.lang.String toString()
          string representation of cache
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ExpirableCache

public ExpirableCache()

ExpirableCache

public ExpirableCache(int defaultTimeToLiveInMinutes)
Parameters:
defaultTimeToLiveInMinutes - time in minutes is the default cache time to live for content

ExpirableCache

public ExpirableCache(ExpirableCache.ExpirableCacheUnit expirableCacheUnit,
                      int defaultTimeToLive)
Parameters:
defaultTimeToLive - time in whatever unit is the default cache time to live for content
expirableCacheUnit - is minutes or seconds
Method Detail

clear

public void clear()
delete the cache


getDefaultTimeToLiveInMillis

public long getDefaultTimeToLiveInMillis()
expose the length of cache

Returns:
length of cache

put

public void put(K key,
                V value)
put a value into the cache, accept the default time to live for this cache

Parameters:
key -
value -

put

public void put(K key,
                V value,
                int timeToLiveInMinutes)
put a value into the cache, accept the default time to live for this cache

Parameters:
key -
value -
timeToLiveInMinutes - time to live for this item in minutes. If -1 then use the default

clearAll

public static void clearAll()
clear out all caches everywhere (session, request, context, etc)


checkForEvictions

public void checkForEvictions(boolean onlyCheckIfNeeded)
check and remove elements that are stale

Parameters:
onlyCheckIfNeeded - true if only check every so often (e.g. every two minutes)

get

public V get(K key)
get a value or null if not there or expired this will check for eviction, and evict if evictable

Parameters:
key -
Returns:
the value or null if not there or evicted

size

public int size(boolean evictEvictables)
number of elements in map (and check for

Parameters:
evictEvictables - true if we should evict values that are stale (even if recently checked)
Returns:
the number of elements

getCacheInserts

public int getCacheInserts()
number of items inserted into the cache

Returns:
Returns the cacheInserts.

getCacheEvictions

public int getCacheEvictions()
number of items evicted from cache

Returns:
Returns the cacheEvictions.

getCacheHits

public int getCacheHits()
number of items successfully retrieved from cache

Returns:
Returns the cacheHits.

toString

public java.lang.String toString()
string representation of cache

Overrides:
toString in class java.lang.Object
See Also:
Object.toString()

staticToString

public static java.lang.String staticToString()
string representation of cache

Returns:
the string value