Showing posts with label Different types of caching in dotnetcore. Show all posts
Showing posts with label Different types of caching in dotnetcore. Show all posts

17 October 2023

Different types of caching in dotnetcore

 Different types of caching in dotnetcore

In .NET Core, you can implement different types of caching mechanisms based on your application's requirements. Here are several types of caching techniques available:

1. **In-Memory Caching:**

In-memory caching stores data in the application's memory. It's fast and suitable for small to medium-sized datasets.

- **Usage:** Use `Microsoft.Extensions.Caching.Memory` namespace.

- **Setup:** Add `services.AddMemoryCache()` in `Startup.cs`.

- **Example:** `IMemoryCache` interface is used for in-memory caching, as described in the previous response.

2. **Distributed Caching:**

Distributed caching stores data in a distributed cache server like Redis, SQL Server, or another server that supports distributed caching.

- **Usage:** Use `Microsoft.Extensions.Caching.Distributed` namespace.

- **Setup:** Add a distributed cache provider, such as Redis, and configure it in `Startup.cs`.

- **Example:** Using Redis as a distributed cache provider.

csharp

services.AddStackExchangeRedisCache(options =>

{

    options.Configuration = "localhost"; // Redis server connection string

    options.InstanceName = "SampleInstance"; // Redis instance name (optional)

});

3. **Response Caching Middleware:**

Response caching allows you to cache entire responses at the HTTP level, avoiding the execution of the entire pipeline for subsequent identical requests.

- **Usage:** Use `Microsoft.AspNetCore.ResponseCaching` middleware.

- **Setup:** Configure the middleware in `Startup.cs` in the `ConfigureServices` and `Configure` methods.

- **Example:**

```csharp

services.AddResponseCaching();

In your `Configure` method:

csharp

app.UseResponseCaching();

```

4. **Cache-Aside Pattern:**

Cache-Aside is a caching pattern where the application code is responsible for loading data into the cache on cache misses and reading data from the cache on cache hits.

- **Usage:** Implement your custom logic to load data into the cache.

- **Example:**

```csharp

public class CacheAsideService

{

    private readonly IMemoryCache _cache;

    private readonly IDataService _dataService;


    public CacheAsideService(IMemoryCache cache, IDataService dataService)

    {

        _cache = cache;

        _dataService = dataService;

    }

    public string GetData(int id)

    {

        if (!_cache.TryGetValue(id, out string data))

        {

            // Data not in cache, load it from the data service

            data = _dataService.GetData(id);

            // Store the data in cache

            _cache.Set(id, data, TimeSpan.FromMinutes(10)); // Cache for 10 minutes

        }

        return data;

    }

}

 5. **Lazy Loading / Memoization:**

Lazy loading or memoization is a technique where the result of an expensive operation is cached and returned when the same operation is called again with the same input.


- **Usage:** Implement caching logic within methods that perform expensive computations.

- **Example:**

```csharp

public class ExpensiveOperationService

{

    private readonly ConcurrentDictionary<int, string> _cache = new ConcurrentDictionary<int, string>();

    public string GetResult(int input)

    {

        return _cache.GetOrAdd(input, ComputeResult);

    }


    private string ComputeResult(int input)

    {

        // Expensive computation logic

        // ...

        return result;

    }

}

Each caching approach has its use cases, advantages, and trade-offs. The choice of caching technique depends on your application's requirements, scalability needs, and the nature of the data being cached. Consider the data size, expiration policies, and required response times when choosing the appropriate caching mechanism for your .NET Core application.

Consistency level in Azure cosmos db

 Consistency level in Azure cosmos db Azure Cosmos DB offers five well-defined consistency levels to provide developers with the flexibility...