Try Playground
Show / Hide Table of Contents

Using IDistributedCache in ASP.NET Core

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

Prerequisites for Using IDistributedCache API

  • .NET
  • Install the following NuGet packages in your application based on your NCache edition:
    • 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, Set, AddNCacheDistributedCache.
  • 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 the IDistributedCache API, you need to add cache configurations in the Appsettings.json of your application. The following IDistributedCache 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": "demoCache",
    "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 expires 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

.NET: Alachisoft.NCache.Caching.Distributed namespace.

In This Article
  • Prerequisites for Using IDistributedCache API
  • Using NCache Distributed Caching
  • See Also

Contact Us

PHONE

+1 (214) 764-6933   (US)

+44 20 7993 8327   (UK)

 
EMAIL

sales@alachisoft.com

support@alachisoft.com

NCache
  • NCache Enterprise
  • NCache Professional
  • Edition Comparison
  • NCache Architecture
  • Benchmarks
Download
Pricing
Try Playground

Deployments
  • Cloud (SaaS & Software)
  • On-Premises
  • Kubernetes
  • Docker
Technical Use Cases
  • ASP.NET Sessions
  • ASP.NET Core Sessions
  • Pub/Sub Messaging
  • Real-Time ASP.NET SignalR
  • Internet of Things (IoT)
  • NoSQL Database
  • Stream Processing
  • Microservices
Resources
  • Magazine Articles
  • Third-Party Articles
  • Articles
  • Videos
  • Whitepapers
  • Shows
  • Talks
  • Blogs
  • Docs
Customer Case Studies
  • Testimonials
  • Customers
Support
  • Schedule a Demo
  • Forum (Google Groups)
  • Tips
Company
  • Leadership
  • Partners
  • News
  • Events
  • Careers
Contact Us

  • EnglishChinese (Simplified)FrenchGermanItalianJapaneseKoreanPortugueseSpanish

  • Contact Us
  •  
  • Sitemap
  •  
  • Terms of Use
  •  
  • Privacy Policy
© Copyright Alachisoft 2002 - 2025. All rights reserved. NCache is a registered trademark of Diyatech Corp.
Back to top