Read Through Cache Usage
This section explains the use of the Read-Through cache provider after configuring and deploying it. NCache provides the Alachisoft.NCache.Runtime.Caching.ReadThruOptions
class to specify Read-Thru options in API. The ReadThruOptions
class contains enum ReadMode
, which can either be ReadThru
or ReadThruForced
, explained below.
ReadThru
checks for the existence of an item in the cache and if not found, fetches the data from the data source.ReadThruForced
fetches the item from a data source, regardless of its existence in the cache or not.
Multiple Read-Through cache providers can be configured through NCache. The default Read-Through cache provider will be called if a specific provider name is not mentioned through API. You can also use providers other than the default by using provider-specific overloads of API.
Important
For Java, before deploying your JAR files, ensure that your Environment Variable for Java Home is set and have the appropriate JDK installed as discussed in the NCache Installation Guide.
Prerequisites to Use Read Through Cache
- To learn about the standard prerequisites required to work with all NCache server-side features, please refer to the given page Server Side API Prerequisites.
- For API details, refer to: CacheItem, Get, ReadMode, GetBulk, CacheConnectionOptions, ReadThruOptions.
Using Read-Through with Get Operation
The following example retrieves an item with Read-Through enabled, corresponding to the specified key using the Get
method.
// Pre-condition: Cache is already connected
// Specify the key of the item
string key = $"Product:{product.ProductID}";
// Specify the readThruOptions for read through operations
var readThruOptions = new ReadThruOptions();
readThruOptions.Mode = ReadMode.ReadThru;
// Retrieve the data of the corresponding item with read thru enabled
Product data = cache.Get<Product>(key, readThruOptions);
if (data != null)
{
// Perform operations accordingly
}
Note
To ensure the operation is fail-safe, it is recommended to handle any potential exceptions within your application, as explained in Handling Failures.
Using ForcedRead-Through
NCache provides the option of forced Read-Through, through which NCache fetches the data from the data source forcefully. It means that the data will not be checked in the cache and will directly be fetched from the data source. You can enable forced Read-Through by specifying the ReadMode
as ReadThruForced
.
The following example gets an item from the cache using the ReadThruForced
option by forcefully enabling Read-Through on it.
// Specify the key of the item
string key = $"Product:{product.ProductID}";
// Specify the readThruOptions for read through operations
var readThruOptions = new ReadThruOptions();
readThruOptions.Mode = ReadMode.ReadThruForced;
// Retrieve the data of the corresponding item with read thru enabled
Product data = cache.Get<Product>(key, readThruOptions);
if (data != null)
{
// Perform operations accordingly
}
Using Read-Through with Bulk Operations
The following example retrieves a dictionary of products with Read-Through enabled, corresponding to the specified keys using the GetBulk
method.
Tip
For a better understanding of these operations review Bulk Operations.
// Create a new array of keys
String[] keys = new string[];
// Specify the readThruOptions for read through operations
var readThruOptions = new ReadThruOptions();
readThruOptions.Mode = ReadMode.ReadThru;
// Retrieve the dictionary of Products with corresponding products
IDictionary<string, Product> retrievedItems = cache.GetBulk<Product>(keys, readThruOptions);
// IDictionary contains cached keys and values
Using Read-Through with CacheItem
The following example retrieves a CacheItem
with Read-Through enabled, corresponding to the specified key.
// Specify the key of the item
string key = $"Product:{product.ProductID}";
// Specify the readThruOptions for read through operations
var readThruOptions = new ReadThruOptions();
readThruOptions.Mode = ReadMode.ReadThru;
// Retrieve the data of the corresponding item with read thru enabled
CacheItem data = cache.GetCacheItem(key, readThruOptions);
if (data != null)
{
// Perform operations accordingly
}
Using Read-Through with Data Structures
The following example retrieves a Counter, List, Queue, HashSet, and Dictionary with Read-Through enabled, corresponding to the specified key.
// Specify the key of the item
string key = $"Product:{product.ProductID}";
// Specify the readThruOptions for read through operations
var readThruOptions = new ReadThruOptions();
readThruOptions.Mode = ReadMode.ReadThru;
switch(mainMenu)
{
case mainMenu.GetDistributedCounter:
// Retrieve the count of the corresponding item with read thru enabled
ICounter counter = cache.DataTypeManager.GetCounter(key, readThruOptions);
break;
case mainMenu.GetDistributedDictionary:
// Retrieve dictionary of the corresponding item with read thru enabled
IDistributedDictionary<string, object> distributedDictionary = cache.DataTypeManager.GetDictionary<string, object>(key,readThruOptions);
break;
case mainMenu.GetDistributedList:
// Retrieve the list of the corresponding item with read thru enabled
IDistributedList<object> distributedList = cache.DataTypeManager.GetList<object>(key, readThruOptions);
break;
case mainMenu.GetDistributedQueue:
// Retrieve the queue of the corresponding item with read thru enabled
IDistributedQueue<object> distributedQueue = cache.DataTypeManager.GetQueue<object>(key, readThruOptions);
break;
case mainMenu.GetDistributedHashSet:
// Retrieve the HashSet of the corresponding item with read thru enabled
IDistributedHashSet<int> distributedHashSet = cache.DataTypeManager.GetHashSet<int>(key, readThruOptions);
break;
}
Configure Default Read-Through Provider
You can specify the default provider through the NCache Management Center or through the client.ncconf file. If the provider name is not provided in both the API and client.ncconf, then default provider will automatically be used.
<cache id="demoCache" default-readthru-provider="defaultProviderName" client-cache-id="" client-cache-syncmode="optimistic" default-writethru-provider="" load-balance="True">
...
</cache>
CacheConnectionOptions
can also be used to specify providers. NCache provides errors in cache logs in case of an exception during the loading of the provided assemblies.
Additional Resources
NCache provides a sample application for Read-Through on GitHub.
See Also
.NET: Alachisoft.NCache.Runtime namespace.
Java: com.alachisoft.ncache.runtime.datasourceprovider namespace.