Basic Cache Operations
Getting an Instance of a Cache
All operations on a cache are performed through an instance of IgniteCache.
You can obtain IgniteCache for an existing cache, or you can create a cache dynamically.
Ignite ignite = Ignition.ignite();
// Obtain an instance of the cache named "myCache".
// Note that different caches may have different generics.
IgniteCache<Integer, String> cache = ignite.cache("myCache");
IIgnite ignite = Ignition.Start();
// Obtain an instance of cache named "myCache".
// Note that generic arguments are only for your convenience.
// You can work with any cache in terms of any generic arguments.
// However, attempt to retrieve an entry of incompatible type
// will result in exception.
ICache<int, string> cache = ignite.GetCache<int, string>("myCache");
IgniteConfiguration cfg;
cfg.springCfgPath = "/path/to/configuration.xml";
Ignite ignite = Ignition::Start(cfg);
// Obtain instance of cache named "myCache".
// Note that different caches may have different generics.
Cache<int32_t, std::string> cache = ignite.GetCache<int32_t, std::string>("myCache");
Creating Caches Dynamically
You can also create a cache dynamically:
Ignite ignite = Ignition.ignite();
CacheConfiguration<Integer, String> cfg = new CacheConfiguration<>();
cfg.setName("myNewCache");
cfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
// Create a cache with the given name if it does not exist.
IgniteCache<Integer, String> cache = ignite.getOrCreateCache(cfg);
Refer to the Cache Configuration section for the list of cache parameters.
IIgnite ignite = Ignition.Start();
// Create cache with given name, if it does not exist.
var cache = ignite.GetOrCreateCache<int, string>("myNewCache");
IgniteConfiguration cfg;
cfg.springCfgPath = "/path/to/configuration.xml";
Ignite ignite = Ignition::Start(cfg);
// Create a cache with the given name, if it does not exist.
Cache<int32_t, std::string> cache = ignite.GetOrCreateCache<int32_t, std::string>("myNewCache");
The methods that create a cache throw an org.apache.ignite.IgniteCheckedException exception when called while the baseline topology is being changed.
javax.cache.CacheException: class org.apache.ignite.IgniteCheckedException: Failed to start/stop cache, cluster state change is in progress.
at org.apache.ignite.internal.processors.cache.GridCacheUtils.convertToCacheException(GridCacheUtils.java:1323)
at org.apache.ignite.internal.IgniteKernal.createCache(IgniteKernal.java:3001)
at org.apache.ignite.internal.processors.platform.client.cache.ClientCacheCreateWithNameRequest.process(ClientCacheCreateWithNameRequest.java:48)
at org.apache.ignite.internal.processors.platform.client.ClientRequestHandler.handle(ClientRequestHandler.java:51)
at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:173)
at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:47)
at org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:278)
at org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:108)
at org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:96)
at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:119)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
You may want to retry the operation if you catch this exception.
Clearing Caches
To clear data from cache, use the clear() or removeAll() method. The sections below will help you choose the correct method for your environment.
Using clear Method
The clear method removes data from the cache without notifying any listeners (for example, CacheEntryRemovedListener). As a result, calling this method does not delete data from external cache storage, and deletion is not replicated via data center replication.
This method is optimized for performance for bulk data removal.
The example below shows how you can call this method:
tab:Java[]
Ignite ignite = Ignition.ignite();
IgniteCache<Integer, String> cache = ignite.cache("myCache");
// Clear all entries without notifying listeners or cache writers
cache.clear();
tab:C#/.NET[]
var ignite = Ignition.GetIgnite();
var cache = ignite.GetCache<int, string>("myCache");
// Clear all entries without notifying listeners or cache writers
cache.Clear();
tab:C++[unsupported]
Using removeAll Method
The removeAll method methodically removes all data from the cache, calling all listeners for each key removed. Data removal will be propagated to external cache storage, and other clusters via data center replication.
Due to invoking listeners and callbacks, this is potentially an expensive operation.
tab:Java[]
Ignite ignite = Ignition.ignite();
IgniteCache<Integer, String> cache = ignite.cache("myCache");
// Remove all entries with full lifecycle integration
cache.removeAll();
tab:C#/.NET[]
var ignite = Ignition.GetIgnite();
var cache = ignite.GetCache<int, string>("myCache");
// Remove all entries with full lifecycle integration
cache.RemoveAll();
tab:C++[]
using namespace ignite::thin;
void RemoveData()
{
cache::CacheClient<int32_t, std::string> cache =
client.GetOrCreateCache<int32_t, std::string>("TestCache");
cache.RemoveAll();
}
Destroying Caches
To delete a cache from all cluster nodes, call the destroy() method.
Ignite ignite = Ignition.ignite();
IgniteCache<Long, String> cache = ignite.cache("myCache");
cache.destroy();
var ignite = Ignition.GetIgnite();
ignite.DestroyCache("myCache");
This API is not presently available for C++.
Atomic Operations
Once you get the instance of a cache, you can start performing get/put operations on it.
IgniteCache<Integer, String> cache = ignite.cache("myCache");
// Store keys in the cache (the values will end up on different cache nodes).
for (int i = 0; i < 10; i++)
cache.put(i, Integer.toString(i));
for (int i = 0; i < 10; i++)
System.out.println("Got [key=" + i + ", val=" + cache.get(i) + ']');
using (var ignite = Ignition.Start("examples/config/example-cache.xml"))
{
var cache = ignite.GetCache<int, string>("cache_name");
for (var i = 0; i < 10; i++)
{
cache.Put(i, i.ToString());
}
for (var i = 0; i < 10; i++)
{
Console.Write("Got [key=" + i + ", val=" + cache.Get(i) + ']');
}
}
IgniteConfiguration cfg;
cfg.springCfgPath = "/path/to/configuration.xml";
try
{
Ignite ignite = Ignition::Start(cfg);
Cache<int32_t, std::string> cache = ignite.GetOrCreateCache<int32_t, std::string>(CACHE_NAME);
// Store keys in the cache (the values will end up on different cache nodes).
for (int32_t i = 0; i < 10; i++)
{
cache.Put(i, std::to_string(i));
}
for (int i = 0; i < 10; i++)
{
std::cout << "Got [key=" << i << ", val=" + cache.Get(i) << "]" << std::endl;
}
}
catch (IgniteError& err)
{
std::cout << "An error occurred: " << err.GetText() << std::endl;
return err.GetCode();
}
Below are more examples of basic atomic operations:
// Put-if-absent which returns previous value.
String oldVal = cache.getAndPutIfAbsent(11, "Hello");
// Put-if-absent which returns boolean success flag.
boolean success = cache.putIfAbsent(22, "World");
// Replace-if-exists operation (opposite of getAndPutIfAbsent), returns previous
// value.
oldVal = cache.getAndReplace(11, "New value");
// Replace-if-exists operation (opposite of putIfAbsent), returns boolean
// success flag.
success = cache.replace(22, "Other new value");
// Replace-if-matches operation.
success = cache.replace(22, "Other new value", "Yet-another-new-value");
// Remove-if-matches operation.
success = cache.remove(11, "Hello");
using (var ignite = Ignition.Start("examples/config/example-cache.xml"))
{
var cache = ignite.GetCache<string, int>("cache_name");
// Put-if-absent which returns previous value.
var oldVal = cache.GetAndPutIfAbsent("Hello", 11);
// Put-if-absent which returns boolean success flag.
var success = cache.PutIfAbsent("World", 22);
// Replace-if-exists operation (opposite of getAndPutIfAbsent), returns previous value.
oldVal = cache.GetAndReplace("Hello", 11);
// Replace-if-exists operation (opposite of putIfAbsent), returns boolean success flag.
success = cache.Replace("World", 22);
// Replace-if-matches operation.
success = cache.Replace("World", 2, 22);
// Remove-if-matches operation.
success = cache.Remove("Hello", 1);
}
IgniteConfiguration cfg;
cfg.springCfgPath = "/path/to/configuration.xml";
Ignite ignite = Ignition::Start(cfg);
Cache<std::string, int32_t> cache = ignite.GetOrCreateCache<std::string, int32_t>("myNewCache");
// Put-if-absent which returns previous value.
int32_t oldVal = cache.GetAndPutIfAbsent("Hello", 11);
// Put-if-absent which returns boolean success flag.
boolean success = cache.PutIfAbsent("World", 22);
// Replace-if-exists operation (opposite of getAndPutIfAbsent), returns previous value.
oldVal = cache.GetAndReplace("Hello", 11);
// Replace-if-exists operation (opposite of putIfAbsent), returns boolean success flag.
success = cache.Replace("World", 22);
// Replace-if-matches operation.
success = cache.Replace("World", 2, 22);
// Remove-if-matches operation.
success = cache.Remove("Hello", 1);
Asynchronous Execution
Most of the cache operations have asynchronous counterparts that have the "Async" suffix in their names.
// a synchronous get
V get(K key);
// an asynchronous get
IgniteFuture<V> getAsync(K key);
// a synchronous get
TV Get(TK key);
// an asynchronous get
Task<TV> GetAsync(TK key);
This API is not presently available for C++.
The asynchronous operations return an object that represents the result of the operation. You can wait for the completion of the operation in either blocking or non-blocking manner.
To wait for the results in a non-blocking fashion, register a closure using the IgniteFuture.listen() or IgniteFuture.chain() method. The closure is called when the operation is completed.
IgniteCompute compute = ignite.compute();
// Execute a closure asynchronously.
IgniteFuture<String> fut = compute.callAsync(() -> "Hello World");
// Listen for completion and print out the result.
fut.listen(f -> System.out.println("Job result: " + f.get()));
class HelloworldFunc : IComputeFunc<string>
{
public string Invoke()
{
return "Hello World";
}
}
public static void AsynchronousExecution()
{
var ignite = Ignition.Start();
var compute = ignite.GetCompute();
//Execute a closure asynchronously
var fut = compute.CallAsync(new HelloworldFunc());
// Listen for completion and print out the result
fut.ContinueWith(Console.Write);
}
This API is not presently available for C++.
© 2025 GridGain Systems, Inc. All Rights Reserved. Privacy Policy | Legal Notices. GridGain® is a registered trademark of GridGain Systems, Inc.
Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are either registered trademarks or trademarks of The Apache Software Foundation.