Show / Hide Table of Contents

# Interface ICacheStore<TK, TV>

API for cache persistent storage for read-through and write-through behavior.

Generic argument types depend on KeepBinaryInStore property. When `true` (default), cache store operates on IBinaryObject instances. Otherwise, generic arguments should be the same as in corresponding ICache<TK, TV>.

Persistent store is configured in Ignite's Spring XML configuration file via `CacheConfiguration.setStore()` property. If you have an implementation of cache store in .NET, you should use special Java wrapper which accepts assembly name and class name of .NET store implementation (both properties are mandatory).

Optionally, you may specify "properies" property to set any property values on an instance of your store. Here is an example:

    <bean class="org.apache.ignite.configuration.CacheConfiguration">
        ...
        <property name="cacheStoreFactory">
            <bean class="org.apache.ignite.platform.dotnet.PlatformDotNetCacheStoreFactory">
                <property name="assemblyName" value="MyAssembly"/>
                <property name="className" value="MyApp.MyCacheStore"/>
                <property name="properties">
                    <map>
                        <entry key="IntProperty">
                            <value type="java.lang.Integer">42</value>
                        </entry>
                        <entry key="StringProperty" value="String value"/>
                    </map>
                </property>
            </bean>
        </property>
        ...
    </bean>

Assemply name and class name are passed to System.Activator.CreateInstance(String, String) method during node startup to create an instance of cache store. Refer to its documentation for details.

All transactional operations of this API are provided with ongoing ITransaction, if any. You can attach any metadata to transaction, e.g. to recognize if several operations belong to the same transaction or not. Here is an example of how attach a ODBC connection as transaction metadata:

    OdbcConnection conn = tx.Meta("some.name");

    if (conn == null)
    {
        conn = ...; // Create or get connection.

        // Store connection in transaction metadata, so it can be accessed
        // for other operations on the same transaction.
        tx.AddMeta("some.name", conn);
    }

###### Namespace: Apache.Ignite.Core.Cache.Store

###### Assembly: Apache.Ignite.Core.dll

##### Syntax

    public interface ICacheStore<TK, TV> : ICacheStore

##### Type Parameters

Name | Description
--- | ---
TK | Key type.
TV | Value type.

### Methods

#### Delete(TK)

Delete the cache entry from the external resource.

Expiry of a cache entry is not a delete hence will not cause this method to be invoked.

This method is invoked even if no mapping for the key exists.

##### Declaration

    void Delete(TK key)

##### Parameters

Type | Name | Description
--- | --- | ---
TK | key | The key that is used for the delete operation.

##### Exceptions

Type | Condition
--- | ---
CacheStoreException |

#### DeleteAll(IEnumerable<TK>)

Remove data and keys from the external resource for the given collection of keys, if present.

The order that individual deletes occur is undefined.

If this operation fails (by throwing an exception) after a partial success, the writer must remove any successfully written entries from the entries collection so that the caching implementation knows what succeeded and can mutate the cache.

Expiry of a cache entry is not a delete hence will not cause this method to be invoked.

This method may include keys even if there is no mapping for that key, in which case the data represented by that key should be removed from the underlying resource.

##### Declaration

    void DeleteAll(IEnumerable<TK> keys)

##### Parameters

Type | Name | Description
--- | --- | ---
System.Collections.Generic.IEnumerable<TK> | keys | a mutable collection of keys for entries to delete. Upon invocation, it contains the keys to delete for write-through. Upon return the collection must only contain the keys that were not successfully deleted.

##### Exceptions

Type | Condition
--- | ---
CacheStoreException |

#### Load(TK)

Loads an object. Application developers should implement this method to customize the loading of a value for a cache entry. This method is called by a cache when a requested entry is not in the cache. If the object can't be loaded `null` should be returned.

##### Declaration

    TV Load(TK key)

##### Parameters

Type | Name | Description
--- | --- | ---
TK | key | The key identifying the object being loaded.

##### Returns

Type | Description
--- | ---
TV | The value for the entry that is to be stored in the cache or `null` if the object can't be loaded

##### Exceptions

Type | Condition
--- | ---
CacheStoreException |

#### LoadAll(IEnumerable<TK>)

Loads multiple objects. Application developers should implement this method to customize the loading of cache entries. This method is called when the requested object is not in the cache. If an object can't be loaded, it is not returned in the resulting map.

##### Declaration

    IEnumerable<KeyValuePair<TK, TV>> LoadAll(IEnumerable<TK> keys)

##### Parameters

Type | Name | Description
--- | --- | ---
System.Collections.Generic.IEnumerable<TK> | keys | Keys identifying the values to be loaded.

##### Returns

Type | Description
--- | ---
System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TK, TV>> | A map of key, values to be stored in the cache.

##### Exceptions

Type | Condition
--- | ---
CacheStoreException |

#### LoadCache(Action<TK, TV>, Object[])

Loads all values from underlying persistent storage. Note that keys are not passed, so it is up to implementation to figure out what to load. This method is called whenever LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) method is invoked which is usually to preload the cache from persistent storage.

This method is optional, and cache implementation does not depend on this method to do anything.

For every loaded value method provided action should be called. The action will then make sure that the loaded value is stored in cache.

##### Declaration

    void LoadCache(Action<TK, TV> act, params object[] args)

##### Parameters

Type | Name | Description
--- | --- | ---
System.Action<TK, TV> | act | Action for loaded values.
System.Object[] | args | Optional arguemnts passed to LocalLoadCache(ICacheEntryFilter<TK, TV>, Object[]) method.

##### Exceptions

Type | Condition
--- | ---
CacheStoreException |

#### SessionEnd(Boolean)

Tells store to commit or rollback a transaction depending on the value of the `commit` parameter.

##### Declaration

    void SessionEnd(bool commit)

##### Parameters

Type | Name | Description
--- | --- | ---
System.Boolean | commit | `True` if transaction should commit, `false` for rollback.

##### Exceptions

Type | Condition
--- | ---
CacheStoreException |

#### Write(TK, TV)

Write the specified value under the specified key to the external resource.

This method is intended to support both key/value creation and value update.

##### Declaration

    void Write(TK key, TV val)

##### Parameters

Type | Name | Description
--- | --- | ---
TK | key | Key to write.
TV | val | Value to write.

##### Exceptions

Type | Condition
--- | ---
CacheStoreException |

#### WriteAll(IEnumerable<KeyValuePair<TK, TV>>)

Write the specified entries to the external resource. This method is intended to support both insert and update.

The order that individual writes occur is undefined.

If this operation fails (by throwing an exception) after a partial success, the writer must remove any successfully written entries from the entries collection so that the caching implementation knows what succeeded and can mutate the cache.

##### Declaration

    void WriteAll(IEnumerable<KeyValuePair<TK, TV>> entries)

##### Parameters

Type | Name | Description
--- | --- | ---
System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TK, TV>> | entries | a mutable collection to write. Upon invocation, it contains the entries to write for write-through. Upon return the collection must only contain entries that were not successfully written. (see partial success above).

##### Exceptions

Type | Condition
--- | ---
CacheStoreException |