CodeNewbie Community 🌱

Sukhpinder Singh
Sukhpinder Singh

Posted on • Originally published at dev.to on

Day 16 of 30-Day .NET Challenge: In-Memory Caching

Image description

Challenges are hard when the database resides in a remote machine or experiencing heavy load. The in-memory caching acts as a better implementation to avoid performance bottlenecks.

Introduction

One of the major issues in an application's performance is the time it takes to respond from external data sources mostly databases. Challenges are hard when the database resides in a remote machine or experiencing heavy load. The in-memory caching acts as a better implementation to avoid performance bottlenecks.

Learning Objectives

  • How to use in-memory caching

  • Key benefits

Prerequisites for Developers

  • Basic understanding of C# programming language.

30 Day .Net Challenge

Getting Started

Usually, developers directly fetch information or data directly from the database. It is quite straightforward and simple approach but can lead to performance issues when the database is under a heavy load which impacts application performance and hampers UI experience

    public Product GetProductById(int id)
    {
        // Fetching product data from the database every time
        var product = _dbContext.Products.FirstOrDefault(p => p.Id == id);
        return product;
    }

Enter fullscreen mode Exit fullscreen mode

How to implement in-memory caching

In-memory caching involves temporarily storing frequently accessed data in the memory of the application server, drastically reducing the need to retrieve data from the database for each request.

    private static MemoryCache _cache = new MemoryCache(new MemoryCacheOptions());

    public Product GetProductById(int id)
    {
        // Fetching product data from the cache if available
        if (!_cache.TryGetValue(id, out Product product))
        {
            product = _dbContext.Products.FirstOrDefault(p => p.Id == id);
            _cache.Set(id, product, TimeSpan.FromMinutes(30));
        }
        return product;
    }

Enter fullscreen mode Exit fullscreen mode

To use MemoryCache, you need to add the Microsoft.Extensions.Caching.Memory package to your project.

    dotnet add package Microsoft.Extensions.Caching.Memory

Enter fullscreen mode Exit fullscreen mode

Create a class InMemoryCache with function named GetProductById which returns a class object of type Product

    public static class InMemoryCache
    {
        private static MemoryCache _cache = new MemoryCache(new MemoryCacheOptions());
        private static ProductRepository _productRepository = new ProductRepository();
        public static Product GetProductById(int id)
        {
            if (!_cache.TryGetValue(id, out Product product))
            {
                Console.WriteLine("Fetching from database...");
                product = _productRepository.GetProductById(id);
                _cache.Set(id, product, TimeSpan.FromMinutes(30)); // Cache for 30 minutes
            }
            else
            {
                Console.WriteLine("Fetching from cache...");
            }

            return product;
        }
    }

Enter fullscreen mode Exit fullscreen mode

Simulate the ProductRepository and relevant Product class

    // Simulating a product repository
    public class ProductRepository
    {
        public Product GetProductById(int id)
        {
            // Simulate database access
            return new Product { Id = id, Name = $"Product {id}" };
        }
    }

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

Enter fullscreen mode Exit fullscreen mode

Call from the main method as follows and relevant console output showcasing data fetched from memory.

    #region Day 16: In-Memory Cache

    Console.WriteLine("Fetching product with ID 1 for the first time:");
    var product = InMemoryCache.GetProductById(1);
    Console.WriteLine($"Product Name: {product.Name}\n");

    Console.WriteLine("Fetching product with ID 1 again:");
    product = InMemoryCache.GetProductById(1); // This time, it should come from the cache
    Console.WriteLine($"Product Name: {product.Name}\n");

    #endregion

Enter fullscreen mode Exit fullscreen mode

Key Benefits

  • Reduce database load

  • Improved application performance

  • Scalability

Complete Code on GitHub

GitHub β€” ssukhpinder/30DayChallenge.Net

C# ProgrammingπŸš€

Thank you for being a part of the C# community! Before you leave:

Follow us: Youtube | X | LinkedIn | Dev.to

Visit our other platforms: GitHub

More content at C# Programming

Top comments (8)

Collapse
 
itstonystark profile image
itstonystark

A Tierbestattungen Balingen located in Balingen provides compassionate and respectful services for pet owners who have lost their beloved companions. With a focus on honoring the bond between humans and animals, this facility offers a dignified way to say goodbye to your furry friends.

Collapse
 
mrsimon007 profile image
Mr Simon

The spiritual aspect is also important in Precana course online. Couples reflect on their faith and its role in marriage, gaining insight into the sacramental nature of their union and aligning their relationship with their faith.

Collapse
 
siriusblack021 profile image
chrisredfield003

Thanks for the valuable information. I will share it with my project Aznameify.

Collapse
 
itstonystark profile image
itstonystark

Is there a specific curriculum or structure to the premarital courses, and can participants customize their learning experience?

Collapse
 
leoking16 profile image
leoking16

Yes, The premarital curso prematrimonial online typically follow a structured curriculum, but participants can often customize their learning experience to some extent.

Collapse
 
mrsimon007 profile image
Mr Simon

Corporate security: Their commitment to understanding and meeting the specific needs of their clients means you receive a high level of service and satisfaction, with solutions that align with your security goals.

Collapse
 
aqsha604 profile image
aqsha604

What does Car for Cash do?

Collapse
 
itstonystark profile image
itstonystark

Car for Cash buys used cars from people who want to sell them quickly and easily.
Regards:
Sell your car Dubai