- eviction of least recently used entries when a maximum size is breached
- eviction of entries based on time since last access or last write
- notification of evicted entries
- performance statistics e.g. hit and miss counts
Cache
, you need to use a CacheBuilder
. This allows you to specify the eviction policy and other features such as concurrency level, soft or weak values etc. You also need to specify a CacheLoader
which will be invoked automatically by the cache if a key does not exist and is used to populate it.
The following code demonstrates how to create a cache:
// Create the cache. Only allow a max of 10 entries. // Old entries will be evicted. final Cache<String, String> cache = CacheBuilder.newBuilder() .maximumSize(10) .removalListener(new RemovalListener<String, String>() { @Override public void onRemoval(RemovalNotification<String, String> n) { System.out.println("REMOVED: " + n); } }) .build(new CacheLoader<String, String>() { @Override public String load(String key) throws Exception { System.out.println("LOADING: " + key); return key + "-VALUE"; } }); // Get values from the cache. // If a key does not exist, it will be loaded. for (int i = 0; i < 10; i++) { System.out.println(cache.get("Key" + i)); } for (int i = 9; i >= 0; i--) { System.out.println(cache.get("Key" + i)); } //Print out the hit counts. System.out.println(cache.stats());The output of this program is:
LOADING: Key0 LOADING: Key1 LOADING: Key2 LOADING: Key3 LOADING: Key4 LOADING: Key5 LOADING: Key6 REMOVED: Key0=Key0-VALUE LOADING: Key7 REMOVED: Key3=Key3-VALUE LOADING: Key8 LOADING: Key9 LOADING: Key3 REMOVED: Key7=Key7-VALUE LOADING: Key0 REMOVED: Key6=Key6-VALUE CacheStats{hitCount=8, missCount=12, loadSuccessCount=12, loadExceptionCount=0, totalLoadTime=563806, evictionCount=4}It is important to note that entries were evicted BEFORE the maximum size of 10 was reached. In this case, an entry was removed when the cache had 7 entries in it.
The cache stats show that out of 20 calls to the cache, 12 missed and had to be loaded. However, 8 were successfully retrieved from the cache. 4 entries were evicted.
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.