Key Dependency
There are situations when you want to keep a relationship among related cache data e.g. item B depends on item A. In such a situation, you would like to remove item B if item A no longer exists in cache. Here you can use key dependency to maintain this relationship.
Key dependency creates a dependency relationship between cached items. For example, you can specify a key dependency on customer's data while putting their order's data. In this way, if a customer is removed by the application or expiration then NCache will remove the order data too.
In NCache, dependent cache items and the ones on which others depend are aware of this relationship. So when an item on which other items depend is removed, all dependent items will be removed. However vice versa is not possible, i.e. on removal of an item, say Y, which has dependency on any other item, say item X, X will not be removed.
A cache item can have a dependency on any number of other items in the cache. For example, item A may depend on item X, Y and Z. Similarly, an item on which others depend can also depend on another cache item i.e. item X may depend on Y while items A and B depend on X. In short, cascaded dependencies are allowed to the nth level e.g. an item A depends on item B and B depends on item C then removal of C will result in removal of B and then A.
Note
Cyclic key dependency is not supported, i.e., Item A depends on Item B and B depends on A. Or A depends on B and B depends on C and in turn C depends on A.
An object can be specified as being dependent on another key at the time of
addition. Note that the only keys present in cache can be specified as key
dependency. Nonexistent key specified as key dependency will result
OperationFailedException
.
To utilize the API, include the following namespace in your application:
Alachisoft.NCache.Runtime.Dependencies.
try
{
cache.Add(key1, "Product:1001");
//add key2 with dependency on key1
cache.Add(key2, "Product:1002", new KeyDependency(key1), Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Normal);
//removing/inserting/deleting key1 will remove key2 because of its dependency
cache.Insert(key1, "Product:1001_updated");
object value = cache.Get(key2);
if (value == null){
//dependent item successfully removed
}
else{
//dependent item not removed
}
}
catch (Exception ex){
// handle exception
}
Warning
In KeyDependency
, an item can only depend on an existing item, thus all
dependency keys must exist in cache before an item can depend on them.