Distributed Caching (Redis) -ASP.NET Core

Merhaba,

Bu yazımda ASP.NET Core Web API projesinde distributed caching (dağıtılmış önbellekleme) nasıl kullanılır ona değineceğim.

Cache(Önbellekleme) Nedir ?

Uygulamanın, kullanıcı tarafından gelen bir request için gerekli bilgileri almak üzere database veya başka bir data kaynağına gidiyor olduğunu düşündüğümüzde küçük sistemler için response time kullanıcının etkileneceği kadar geç olmayabilir. Fakat RPS(saniyedeki istek sayısı) ‘in yüksek olduğu sistemlerde bu response time’ı oldukça uzatacaktır.

Bunun için tekrar kullanılma ihtimali olan verilerin geçici olarak depolanmasını sağlayabiliriz. Bu sayede uygulamaya gelen request için ilk önce cache üzerinde arama yaparak response time’ı azaltıp daha iyi bir kullanıcı deneyimi sunabiliriz.

Distributed Caching(Dağıtılmış Önbellekleme) Nedir ?

Shared Cache kullanımı

Performanslı, ölçeklenebilir, tutarlı, cache tutma kapasitesi yüksek sistemler geliştirmeye olanak sağlar.

Local cache yerine tercih edilmesinin sebebi ölçeklenebilirlik ve tutarlılık olduğunu söyleyebiliriz. Birden fazla sunucuda çalışan uygulamalar shared bir cache kullanacağı için data consistency (veri tutarlılığı) sağlanmış olacaktır.

REDIS (Remote Dictionary Server)

Redis in-memory, key-value veritabanıdır.

REDIS Nasıl Kurulur ?

Redis’i servis olarak bilgisayara kurmak gerekiyor. Buradan son stabil versiyonunu indirebilirsiniz. İndirilen dosyalardan redis-server.exe adlı exe’yi çalıştırıp aşağıdaki gibi çıktı almamız gerekiyor.

Redis sunucusunu kurduğumuz ve düzgün çalıştığını gördüğümüze göre, Redis tabanlı dağıtılmış önbellek kullanacak şekilde API yazabiliriz.

ASP .Net Core API IDistributedCache Kullanımı

.Net Core API oluşturduktan sonra Nuget paketleri içerisinde

Microsoft.Extensions.Caching.StackExchangeRedis paketini aratıp bu pakete bağlı paketleri yükledikten sonra projemize install edelim.

Startup.cs sınıfnda ConfigureServices metodu içerisinde redis konfigürasyonunu aşağıdaki şekilde yapabiliriz.

Redis default 6379 portunda çalıştığı için aşağıdaki gibi set edebiliriz.

Senaryo

Hedefimiz bir ülkeye ait illeri response olarak dönen bir API yazmak olsun.

Cacheleme yaparak response time’ı düşürebilir ve database/başka bir servise yük bindirmemeyi sağlayabiliriz.

Aşağıdaki örnekte ilk önce ülkeye ait il bilgileri redis üzerinde cachelenmiş mi ona bakıyoruz. Eğer redis üzerinde ise response olarak dönüyoruz.

Redis üzerinde daha önce bu bilgi cachelenmedi ise datayı çekeceğimiz kaynağa gidip güncel halini alıyoruz ve cacheliyoruz. Ardından response olarak dönüyoruz.

API CALL

https://localhost:44328/api/cities?countryId=1

Cache expire olana kadar datayı esas kaynağından sadece bir kere alıp redise key value şeklinde kaydetmiş olduk.

Kodlara Github hesabım üzerinden ulaşabilirsiniz.

Faydalı Olacağını Düşündüğüm Kaynaklar

İyi Çalışmalar :)

Software Engineer @hepsiburada

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store