A distributed cache is a cache shared by multiple app servers, typically maintained as an external service to the app servers that access it. A distributed cache can improve the performance and scalability of an ASP.NET Core app, especially when the app is hosted by a cloud service or a server farm.
This article will take you though some of the basic concepts of c# like Generic and asp.net core Dependency Injection and most importantly Distributed Caching, a reusable component. Caching is a very useful part of large applications, it minimizes the cost of making DB calls in API request. Here we will be implementing Distributed Caching. Let’s go ahead and get started.
Steps by Steps to Implement Distributed Caching
1. Create new project
Search for ASP.NET core web application and select it. Then click on Next
2. Package Installation
Right-click on Project Solution select Manage Nuget Package and Install the following packages
· System.Data.SqlClient
3. Configuration
After the project creation, go to Startup.cs. In the ConfigureServices method, we need to add Distributed Memory Cache service.
"ConnectionStrings": {"SqlServerCString": "Data Source=localhost;Initial Catalog=caching;Persist Security Info=True;User ID=sa;Password=1234;"}
A complete view of appsettings.json
4. Create Database
- Open your SQL Server Management Studio and create a database named caching.
- Then open your query window and create a table named Student with the following query and insert some data using the following query
5. Create Controller
Click on the Controllers folder and add a new Controller. On the next screen select API Controller Empty and Click on Add
[Route("api/[controller]")]
to
[Route("api/caching")]
6. Create Database Model
Create a folder and name it Model, add Student.cs with the following code. Make Model serializable for further serializing in setting cache
Place the below code inside CachingController
IMemoryCache.cs
MemoryCache.cs
After placing all code accordingly, we will do Dependency Injection MemoryCache in Startup.cs. Add the following code inside the ConfigureServices method
Now MemoryCache implementation available throughout Application Lifetime and an instance will be created every time there will be a request to the server.
Now let’s go for caching the result after fetching data from Student Table
- First, let’s receive MemoryCache through Constructor Injection in CachingController.cs with the following code.
- Let’s cache student list after fetching data from Student Table, update the GetResult method in CachingController with the following code
So now fetched data from DB is now stored in a cache, now we have to check if student data available in the cache then fetch data from the cache otherwise make DB call and store it in the cache using the same method. Update the GetResult method with the following code.
So now make a request from POSTMAN to https://localhost:<PORT>/api/caching and see the difference in response time
You can see time 7 MS, this makes a huge difference in server efficiency using the caching method.
Now, we have created a service that will be injected in Startup.cs file, a component that can be used in any project for caching. One more point if you want to remove a particular cache from memory then in the same way call removeCache and pass the CacheKeys inside the function. It will remove cache from memory.