org.infinispan
Interface Cache<K,V>

All Superinterfaces:
BasicCache<K,V>, ConcurrentMap<K,V>, Lifecycle, Listenable, Map<K,V>
All Known Subinterfaces:
AdvancedCache<K,V>
All Known Implementing Classes:
AbstractDelegatingAdvancedCache, AbstractDelegatingCache, CacheImpl, ClassLoaderSpecfiedCache, DecoratedCache

public interface Cache<K,V>
extends BasicCache<K,V>, Listenable

The central interface of Infinispan. A Cache provides a highly concurrent, optionally distributed data structure with additional features such as:

For convenience, Cache extends ConcurrentMap and implements all methods accordingly, although methods like Map.keySet(), Map.values() and Map.entrySet() are expensive (prohibitively so when using a distributed cache) and frequent use of these methods is not recommended.

Map.size() provides the size of the local, internal data container only. This does not take into account in-fly transactions, entries stored in a cache store, or remote entries. It may also take into consideration entries that have expired but haven't yet been removed from the internal container, as well as entries in the L1 cache if L1 is enabled along with distribution as a clustering mode. See the Infinispan User Guide section on L1 caching for more details.

Also, like many ConcurrentMap implementations, Cache does not support the use of null keys or values.

Unsupported operations

Map.containsValue(Object)

Asynchronous operations

Cache also supports the use of "async" remote operations. Note that these methods only really make sense if you are using a clustered cache. I.e., when used in LOCAL mode, these "async" operations offer no benefit whatsoever. These methods, such as BasicCache.putAsync(Object, Object) offer the best of both worlds between a fully synchronous and a fully asynchronous cache in that a NotifyingFuture is returned. The NotifyingFuture can then be ignored or thrown away for typical asynchronous behaviour, or queried for synchronous behaviour, which would block until any remote calls complete. Note that all remote calls are, as far as the transport is concerned, synchronous. This allows you the guarantees that remote calls succeed, while not blocking your application thread unnecessarily. For example, usage such as the following could benefit from the async operations:
   NotifyingFuture f1 = cache.putAsync("key1", "value1");
   NotifyingFuture f2 = cache.putAsync("key2", "value2");
   NotifyingFuture f3 = cache.putAsync("key3", "value3");
   f1.get();
   f2.get();
   f3.get();
 
The net result is behavior similar to synchronous RPC calls in that at the end, you have guarantees that all calls completed successfully, but you have the added benefit that the three calls could happen in parallel. This is especially advantageous if the cache uses distribution and the three keys map to different cache instances in the cluster.

Also, the use of async operations when within a transaction return your local value only, as expected. A NotifyingFuture is still returned though for API consistency.

Constructing a Cache

An instance of the Cache is usually obtained by using a CacheContainer.
   CacheManager cm = new DefaultCacheManager(); // optionally pass in a default configuration
   Cache c = cm.getCache();
 
See the CacheContainer interface for more details on providing specific configurations, using multiple caches in the same JVM, etc.

Please see the Infinispan documentation and/or the 5 Minute Usage Tutorial for more details.

Since:
4.0
Author:
Mircea.Markus@jboss.com, Manik Surtani, Galder ZamarreƱo
See Also:
CacheContainer, DefaultCacheManager, Infinispan documentation, 5 Minute Usage Tutorial

Nested Class Summary
 
Nested classes/interfaces inherited from interface java.util.Map
Map.Entry<K,V>
 
Method Summary
 void compact()
          Method that releases object references of cached objects held in the cache by serializing them to byte buffers.
 void endBatch(boolean successful)
          Completes a batch if one has been started using startBatch().
 Set<Map.Entry<K,V>> entrySet()
          Returns a set view of the mappings contained in this cache.
 void evict(K key)
          Evicts an entry from the memory of the cache.
 AdvancedCache<K,V> getAdvancedCache()
           
 Configuration getCacheConfiguration()
           
 EmbeddedCacheManager getCacheManager()
          Retrieves the cache manager responsible for creating this cache instance.
 Configuration getConfiguration()
          Deprecated. 
 ComponentStatus getStatus()
           
 Set<K> keySet()
          Returns a set view of the keys contained in this cache.
 void putForExternalRead(K key, V value)
          Under special operating behavior, associates the value with the specified key.
 boolean startBatch()
          Starts a batch.
 Collection<V> values()
          Returns a collection view of the values contained in this cache.
 
Methods inherited from interface org.infinispan.api.BasicCache
clearAsync, getAsync, getName, getVersion, put, put, putAll, putAll, putAllAsync, putAllAsync, putAllAsync, putAsync, putAsync, putAsync, putIfAbsent, putIfAbsent, putIfAbsentAsync, putIfAbsentAsync, putIfAbsentAsync, removeAsync, removeAsync, replace, replace, replace, replace, replaceAsync, replaceAsync, replaceAsync, replaceAsync, replaceAsync, replaceAsync
 
Methods inherited from interface java.util.concurrent.ConcurrentMap
putIfAbsent, remove, replace, replace
 
Methods inherited from interface java.util.Map
clear, containsKey, containsValue, equals, get, hashCode, isEmpty, put, putAll, remove, size
 
Methods inherited from interface org.infinispan.lifecycle.Lifecycle
start, stop
 
Methods inherited from interface org.infinispan.notifications.Listenable
addListener, getListeners, removeListener
 

Method Detail

putForExternalRead

void putForExternalRead(K key,
                        V value)
Under special operating behavior, associates the value with the specified key. This method is for caching data that has an external representation in storage, where, concurrent modification and transactions are not a consideration, and failure to put the data in the cache should be treated as a 'suboptimal outcome' rather than a 'failing outcome'.

An example of when this method is useful is when data is read from, for example, a legacy datastore, and is cached before returning the data to the caller. Subsequent calls would prefer to get the data from the cache and if the data doesn't exist in the cache, fetch again from the legacy datastore.

See JBCACHE-848 for details around this feature.

Parameters:
key - key with which the specified value is to be associated.
value - value to be associated with the specified key.
Throws:
IllegalStateException - if getStatus() would not return ComponentStatus.RUNNING.

evict

void evict(K key)
Evicts an entry from the memory of the cache. Note that the entry is not removed from any configured cache stores or any other caches in the cluster (if used in a clustered mode). Use Map.remove(Object) to remove an entry from the entire cache system.

This method is designed to evict an entry from memory to free up memory used by the application. This method uses a 0 lock acquisition timeout so it does not block in attempting to acquire locks. It behaves as a no-op if the lock on the entry cannot be acquired immediately.

Important: this method should not be called from within a transaction scope.

Parameters:
key - key to evict

getConfiguration

@Deprecated
Configuration getConfiguration()
Deprecated. 


getCacheConfiguration

Configuration getCacheConfiguration()

startBatch

boolean startBatch()
Starts a batch. All operations on the current client thread are performed as a part of this batch, with locks held for the duration of the batch and any remote calls delayed till the end of the batch.

Returns:
true if a batch was successfully started; false if one was available and already running.

endBatch

void endBatch(boolean successful)
Completes a batch if one has been started using startBatch(). If no batch has been started, this is a no-op.

Parameters:
successful - if true, the batch completes, otherwise the batch is aborted and changes are not committed.

getCacheManager

EmbeddedCacheManager getCacheManager()
Retrieves the cache manager responsible for creating this cache instance.

Returns:
a cache manager

getAdvancedCache

AdvancedCache<K,V> getAdvancedCache()

compact

void compact()
Method that releases object references of cached objects held in the cache by serializing them to byte buffers. Cached objects are lazily de-serialized when accessed again, based on the calling thread's context class loader.

This can be expensive, based on the effort required to serialize cached objects.


getStatus

ComponentStatus getStatus()

keySet

Set<K> keySet()
Returns a set view of the keys contained in this cache. This set is immutable, so it cannot be modified and changes to the cache won't be reflected in the set. When this method is called on a cache configured with distribution mode, the set returned only contains the keys locally available in the cache instance. To avoid memory issues, there will be not attempt to bring keys from other nodes.

This method should only be used for debugging purposes such as to verify that the cache contains all the keys entered. Any other use involving execution of this method on a production system is not recommended.

Specified by:
keySet in interface Map<K,V>
Returns:
a set view of the keys contained in this cache.

values

Collection<V> values()
Returns a collection view of the values contained in this cache. This collection is immutable, so it cannot be modified and changes to the cache won't be reflected in the set. When this method is called on a cache configured with distribution mode, the collection returned only contains the values locally available in the cache instance. To avoid memory issues, there is not attempt to bring values from other nodes.

This method should only be used for testing or debugging purposes such as to verify that the cache contains all the values entered. Any other use involving execution of this method on a production system is not recommended.

Specified by:
values in interface Map<K,V>
Returns:
a collection view of the values contained in this map.

entrySet

Set<Map.Entry<K,V>> entrySet()
Returns a set view of the mappings contained in this cache. This set is immutable, so it cannot be modified and changes to the cache won't be reflected in the set. Besides, each element in the returned set is an immutable Map.Entry. When this method is called on a cache configured with distribution mode, the set returned only contains the mappings locally available in the cache instance. To avoid memory issues, there will be not attempt to bring mappings from other nodes.

This method should only be used for debugging purposes such as to verify that the cache contains all the mappings entered. Any other use involving execution of this method on a production system is not recommended.

Specified by:
entrySet in interface Map<K,V>
Returns:
a set view of the mappings contained in this cache.

-->

Copyright © 2012 JBoss, a division of Red Hat. All Rights Reserved.