Breaking News

HybridCache pada ASP Net



Salah satu hal yang penting untuk membangun aplikasi performa tinggih adalah cache. ASP Net pada awalnya mempunyai teknologi caching berupa IMemoryCache dan IDistributedCache. IMemoryCache menggunakan memory pada internal web server untuk melakukan caching. Sedangkan IDistributedCache memanfaatkan sumber daya external server seperti Redis untuk melakukan caching. Keduanya mempunyai nilai plus dan minusnya sendiri-sendiri.

Mulai dari Net 9.0, kita dapat menggunakan HybridCache. Sebuah library yang memadukan penggunaan cache pada internal dan eksternal. Cache ini akan mengkombinasikan penggunakan MemoryCache untuk kebutuhan cache yang cepat (L1) dan DistributedCache untuk kebutuhan cache yang lebih luas dan besar (L2). Selain itu HybridCache juga memungkinkan penggunaan Tags sebagai penanda cache, sehingga mempermudah dalam menghapus cache yang berkaitan.

Pada tulisan kali ini, mari kita belajar bersama mengimplementasikan HybridCache pada aplikasi ASP Net. 

Pertama, install HybridCache library

dotnet package add Microsoft.Extensions.Caching.Hybrid

lalu tambahkan konfigurasi pada Program.cs

builder.Services.AddHybridCache(options =>

{

    // ukuran maximum tiap cache
    options.MaximumKeyLength = 512;

    options.MaximumPayloadBytes = 1024 * 1024 * 10; // 10MB

     
    // Timeouts

    options.DefaultEntryOptions = new HybridCacheEntryOptions

    {

        Expiration = TimeSpan.FromMinutes(30),

        LocalCacheExpiration = TimeSpan.FromMinutes(30)

    };

});

Kemudian, kita dapat menggunakan beberapa fungsi dasar pada HybridCache 

GetOrCreateAsync

Fungsi ini adalah fungsi utama dalam penggunaan HybridCache. Fungsi ini merangkap untuk mengambil cache sesuai key yang diminta, jika tidak ditemukan akan mengambil dari database. Secara otomatis fungsi ini akan menyimpan data ke dalam cache dan mengeluarkan hasilnya.


var result = await _cache.GetOrCreateAsync(

    $”Post-{id}”,

    async ct =>

    {

        //mengambil data dari DB

        _logger.LogDebug("Cache miss for key: {Key}", key);

        return _context.Posts.FirstOrDefault(p => p.Id == id); 

    },

    entryOptions,

    tags:[“Post”], //tags

    cancellationToken: cancellationToken

)


RemoveAsync

Fungsi ini menghapus cache berdasarkan spesifik key yang diminta. 

await _cache.RemoveAsync($”Post-{id}”, cancellationToken);

RemoveByTagsAsync

Untuk menghapus cache yang berkaitan, bisa dengan fungsi ini. Cache dengan tag yang sama akan dihapus.

 await _cache.RemoveByTagAsync(“Post”, cancellationToken);


Menambahkan Redis sebagai penyimpanan terdistribusi (L2 Cache)

 Menginstall ekstensi untuk Redis

dotnet package Add Microsoft.Extensions.Caching.StackExchangeRedis


Konfigurasi Redis pada Program.cs: 

// Menambahkan Redis

builder.Services.AddStackExchangeRedisCache(options =>

{

    options.Configuration = "redis-connectionstring";

});

 

// Hybrid Cache secara otomatis akan menggunakan L2

builder.Services.AddHybridCache();

 

Kesimpulan

Penggunaan HybridCache memadukan antara cache yang cepat di dalam memory dan juga cache terdistribusi. HybridCache dapat membantu meningkatkan performa dan mengurangi beban pada database.

Kita bisa juga membuat service atau interface dengan cache untuk penggunaan yang lebih kompleks. Namun, alangkah lebih baik untuk memulai dengan pola sederhana dalam penggunaan cache ini.

Selamat Mencoba!

Tidak ada komentar