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

Using IDistributedCache API

Distributed cache configuration is implementation specific. Here we describe how to configure NCache as a distributed cache by implementing IDistributedCache API.

Prerequisites

  • .NET/.NET Core
  • Install the following NuGet packages in your application based on your NCache Version:
    • Enterprise: NCache.Microsoft.Extensions.Caching
    • Professional: NCache.Microsoft.Extensions.Caching.Professional
  • The cache must be running.
  • The application must be connected to cache before performing the operation.
  • For API details, refer to: TryGetValue, AddNCacheDistributedCache, Set.
  • Make sure that the data being added is serializable.
  • To ensure the operation is fail safe, it is recommended to handle any potential exceptions within your application, as explained in Handling Failures.
  • To handle any unseen exceptions, refer to the Troubleshooting section.

Using NCache Distributed Caching

To use NCache through IDistributedCache API, you need to add cache configurations in Appsettings.json of your application. The following example adds a section NCacheSettings which configures the cache name. You may change the name according to your registered cache.

Important

Make sure that the specified cache is running.

. . .

"NCacheSettings": {
    "CacheName": "demoClusteredCache",
    "EnableLogs": "True",
    "ExceptionsEnabled": "True"
}

. . .

Once the cache configuration has been specified, use the NCache provided custom method AddNCacheDistributedCache() method in Startup.cs to set NCache as the default cache for storing objects.

public void ConfigureServices(IServiceCollection services)
{
    services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
}

NCache is now the underlying cache for IDistributedCache. Let’s suppose our database contains information for a music store, including album information, genre, artist, order details, and so on. We proceed to fetch the details for an album, which is stored as an object of the Album class. The following code snippet attempts to get the album detail based on the cache key. If the specified item is not found in the cache, it is fetched from the database and stored in the cache with an expiration of 10 minutes. If no operation is performed on this object within the next 10 minutes, it is expired from the cache. Meanwhile, if it is fetched from the cache, it is returned as an object of Album.

public async Task<IActionResult> Details(
             [FromServices] IDistributedCache cache,
             int id)
{
            var cacheKey = string.Format("album1", id);
            Album album;
            object value;

            if (!cache.TryGetValue(cacheKey, out value)){
                album = await DbContext.Albums
                                .Where(a => a.AlbumId == id)
                                .Include(a => a.Artist)
                                .Include(a => a.Genre)
                                .FirstOrDefaultAsync();

                if (album != null)
                {
                    if (_appSettings.CacheDbResults)
                    {
                        //Remove it from cache if not retrieved in last 10 minutes
                        cache.SetObject(cacheKey, album, new DistributedCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromMinutes(10)));
                    }
                }
            }
            else
            {
                album = value as Album;
            }
            if (album == null)
            {
                return NotFound();
            }
            return View(album);
        }
}

See Also

Multi-Region ASP.NET Core Session Provider for NCache
Session Storage in ASP.NET Core
ASP.NET Core Response Caching

Back to top Copyright © 2017 Alachisoft