• Webinars
  • Docs
  • Download
  • Blogs
  • Contact Us
Try Free
Show / Hide Table of Contents

Sliding Data Expiration in Cache

NCache allows you to configure sliding expiration to retain the cache data as long as it is being used by the application and remove any data that has not been used for a specific period of time. This is particularly useful in maintaining sessions, as any session which has been idle for a specific period is considered inactive and can be removed by the cache.

Sliding expiration ensures that if the data is accessed within the specified time interval the cache item life span will be extended by the interval value. For example, a session is added with 10 minutes expiration. the session is accessed at the 6th minute, so the life of the session in cache will be extended by another 10 minutes.

Prerequisites

  • .NET/.NET Core
  • Java
  • Scala
  • Node.js
  • Python
  • To learn about the standard prerequisites required to work with all NCache client side features please refer to the given page on Client Side API Prerequisites.
  • For API details, refer to: ICache, CacheItem, CacheItemAttributes, Contains, Count, Expiration, Insert, UpdateAttributes.
  • To learn about the standard prerequisites required to work with all NCache client side features please refer to the given page on Client Side API Prerequisites.
  • For API details, refer to: Cache, CacheItem, CacheItemAttributes, contains, getCount, Expiration, insert, updateAttributes.
  • To learn about the standard prerequisites required to work with all NCache client side features please refer to the given page on Client Side API Prerequisites.
  • For API details refer to: Cache, CacheItem, Expiration.
  • To learn about the standard prerequisites required to work with all NCache client side features please refer to the given page on Client Side API Prerequisites.
  • For API details, refer to: Cache, CacheItem, CacheItemAttributes, contains, getCount, Expiration, insert, updateAttributes.
  • To learn about the standard prerequisites required to work with all NCache client side features please refer to the given page on Client Side API Prerequisites.
  • For API details refer to: Cache, CacheItem CacheItemAttributes, contains, get_count, update_attributes, insert.

Add/Update Item with Sliding Expiration

You can add/update the cache items to set expiration, using the Insert method.

CacheItem is a custom class provided by NCache which can be used to add data to the cache and also lets you set additional metadata associated with an object of this class. This metadata defines the properties of the item like expiration, dependencies and more.

The following example sets the value of the Expiration property to Sliding Expiration of 5 minutes for a CacheItem and adds it to the cache if the key does not exist - and updates the item if it exists. This CacheItem will then be removed from the cache after 5 minutes.

Tip

You can monitor/verify expiration through:

  • "Cache Count" Counter in NCache Web Monitor or PerfMon Counters
  • Using cache.Contains() after expiration interval has elapsed
  • Using cache.Count before and after specifying expiration
  • .NET/.NET Core
  • Java
  • Scala
  • Node.js
  • Python
try
{
    // Pre-condition: Cache is already connected
    // Get product from database against given product ID
    Product product = FetchProductFromDB(1001);

    // Generate a unique cache key for this product
    string key = $"Product:{product.ProductID}";

    // Create a new CacheItem for this product
    var cacheItem = new CacheItem(product);

    // Set Expiration TimeSpan
    var expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(5));

    cacheItem.Expiration = expiration;

    // Add/Update item with expiration
    cache.Insert(key, cacheItem);
}
catch (OperationFailedException ex)
{
    // Exception can occur due to:
    // Connection Failures
    // Operation Timeout
    // Operation performed during state transfer
}
catch (Exception ex)
{
    // Any generic exception like ArgumentNullException or ArgumentException
}
try
{
    // Pre-condition: Cache is already connected
    // Get product from database against given product ID
    Product product = fetchProductFromDB(1001);

    // Generate a unique cache key for this product
    String key = "Product:" + product.getProductID();

    // Create a new CacheItem for this product
    CacheItem cacheItem = new CacheItem(product);

    // Set Expiration type and TimeSpan
    Expiration expiration = new Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(5));

    cacheItem.setExpiration(expiration);

    // Add/Update item in cache with expiration
    cache.insert(key, cacheItem);
}
catch (OperationFailedException ex)
{
    // Exception can occur due to:
    // Connection Failures
    // Operation Timeout
    // Operation performed during state transfer
}
catch (Exception ex)
{
    // Any generic exception like IllegalArgumentException or NullPointerException
}
try {
    // Pre-condition: Cache is already connected
    // Get product from database against given product ID
    val product = fetchProductFromDB(1001)

    // Generate a unique cache key for this product
    val key = "Product:" + product.getProductId

    // Create a new CacheItem for this product
    val cacheItem = new CacheItem(product)

    // Set Expiration type and TimeSpan
    val expiration = Expiration(ExpirationType.Sliding, TimeSpan.FromMinutes(5))

    cacheItem.setExpiration(expiration)

    // Add/Update item in cache with expiration
    cache.insert(key, cacheItem)
}
catch {
    case exception: Exception => {
      // Handle any errors
    }
}
// This is an async method
try
{
    // Pre-condition: Cache is already connected
    // Get product from database against given product ID
    var product = this.fetchProductFromDB(1001);

    // Generate a unique cache key for this product
    var key = "Product:" + product.getProductID();

    // Create a new CacheItem for this product
    // You also need to specify the FQN (Fully Qualified Name) of the class
    var cacheItem = new ncache.CacheItem(product,"FQN.Product");

    // Set Expiration type and TimeSpan
    var expiration = new ncache.Expiration(ncache.ExpirationType.Sliding, ncache.TimeSpan.FromMinutes(5));

    cacheItem.setExpiration(expiration);

    // Add/Update item in cache with expiration
    await this.cache.insert(key, cacheItem);
}
catch (error)
{
    // Handle errors
}
try:
    # Pre-condition: Cache is already connected
    # Get product from database
    product = fetch_product_from_db()

    # Generate a unique cache key for this product
    key = "Product:" + product.get_product_id()

    # Create a new CacheItem for this product
    cache_item = ncache.CacheItem(product)

    # Set Expiration type and TimeSpan
    expiration = ncache.Expiration(ncache.ExpirationType.SLIDING, ncache.TimeSpan.from_minutes(5))

    cache_item.set_expiration(expiration)

    # Add / Update item in cache with expiration
    cache.insert(key, cache_item)
except Exception as exp:
    # Handle errors

Add/Update Item with Configured Default Expirations

Note

This feature is only available in NCache Enterprise Edition.

You can specify sliding expiration in the API using the DefaultSliding and DefaultSlidingLonger values configured in NCache Web Manager or config.ncconf. This provides flexibility of changing the value externally if needed, without changing the code.

The following code associates configured default expiration (DefaultSliding in this case) with an item and adds it to the cache if the key does not exist in cache, and updates the item with expiration if the key exists. If the item is not accessed within the configured time interval, the item will expire. Otherwise, the item's life will be extended by the same time interval.

Important

To enable default expiration, it is mandatory that you enable it through NCache Web Manager or config.ncconf. If you pass the API for default expiration and it is not configured through NCache Web Manager or config.ncconf, it will not work.

Tip

You can monitor/verify expiration through:

  • "Cache Count" Counter in NCache Web Monitor or PerfMon Counters
  • Using cache.Contains() after expiration interval has elapsed
  • Using cache.Count before and after specifying expiration
  • .NET/.NET Core
  • Java
  • Scala
  • Node.js
  • Python
try
{
    // Pre-condition: Cache is already connected
    // Get product from database against given product ID
    Product product = FetchProductFromDB(1001);

    // Generate a unique cache key for this product
    string key = $"Product:{product.ProductID}";

    // Create a cacheItem instance for product
    var cacheItem = new CacheItem(product);

    // Set Expiration TimeSpan
    var expiration = new Expiration(ExpirationType.DefaultSliding);

    cacheItem.Expiration = expiration;

    //Add/Update item into the cache with expiration
    CacheItemVersion version = cache.Insert(key, cacheItem);
}
catch (OperationFailedException ex)
{
    // Exception can occur due to:
    // Connection Failures
    // Operation Timeout
    // Operation performed during state transfer
}
catch (Exception ex)
{
    // Any generic exception like ArgumentNullException or ArgumentException
}
try
{
    // Pre-condition: Cache is already connected
    // Get product from database against given product ID
    Product product = fetchProductFromDB(1001);

    // Generate a unique cache key for this product
    String key = "Product:" + product.getProductID();

    // Create a cacheItem instance for product
    CacheItem cacheItem = new CacheItem(product);

    // Set Expiration type
    Expiration expiration = new Expiration(ExpirationType.DefaultSliding);

    cacheItem.setExpiration(expiration);

    //Add/Update item into the cache with expiration
    CacheItemVersion version = cache.insert(key, cacheItem);
}
catch (OperationFailedException ex)
{
    // Exception can occur due to:
    // Connection Failures
    // Operation Timeout
    // Operation performed during state transfer
}
catch (Exception ex)
{
    // Any generic exception like IllegalArgumentException or NullPointerException
}
try {
    // Pre-condition: Cache is already connected
    // Get product from database against given product ID
    val product = fetchProductFromDB(1001)

    // Generate a unique cache key for this product
    val key = "Product:" + product.getProductId

    // Create a cacheItem instance for product
    val cacheItem = new CacheItem(product)

    // Set Expiration type
    val expiration = Expiration(ExpirationType.DefaultSliding)

    cacheItem.setExpiration(expiration)

    //Add/Update item into the cache with expiration
    val version = cache.insert(key, cacheItem)
}
catch {
    case exception: Exception => {
      // Handle any errors
    }
}
// This is an async method
try
{
    // Pre-condition: Cache is already connected
    // Get product from database against given product ID
    var product = this.fetchProductFromDB(1001);

    // Generate a unique cache key for this product
    var key = "Product:" + product.getProductID();

    // Create a cacheItem instance for product
    // You also need to specify the FQN(Fully Qualified Name) of the class
    var cacheItem = new ncache.CacheItem(product,"FQN.Product");

    // Set Expiration type
    var expiration = new ncache.Expiration(ncache.ExpirationType.DefaultSliding);

    cacheItem.setExpiration(expiration);

    //Add/Update item into the cache with expiration
    var version = await this.cache.insert(key, cacheItem);
}
catch (error )
{
    // Handle errors
}
try:
    # Pre-condition: Cache is already connected
    # Get product from database
    product = fetch_product_from_db()

    # Generate a unique cache key for this product
    key = "Product:" + product.get_product_id()

    # Create a new CacheItem for this product
    cache_item = ncache.CacheItem(product)

    # Set Expiration type and TimeSpan
    expiration = ncache.Expiration(ncache.ExpirationType.DEFAULT_SLIDING)

    cache_item.set_expiration(expiration)

    # Add/Update item in cache with expiration
    version = cache.insert(key, cache_item)
except Exception as exp:
    # Handle errors

Additional Resources

NCache provides a sample application for Sliding Expiration on GitHub.

See Also

Absolute Data Expiration in Cache
Cache Data Expiration
Named Tags
Data Dependency for Relationship in Cache

Back to top Copyright © 2017 Alachisoft