Cache in-memory ve Redis .NET
Merhabalar, Docker üzerinde .Net 5 uygulamamız ile in memory cache ve Redis kullanımının nasıl olacağına hep birlikte bakalım.
Öncelikle in-memory cache ve distributed cache nedir bunlardan bahsetmek istiyorum;
In-memory cache
In-memory cache, önbelleğe alınmış verileri depolamak için sunucu belleğini kullanır. Uygulamanın bulunduğu sunucu üzerinde verileri tutar.
Distributed Cache
Uygulama bir bulutta veya sunucu grubunda barındırıldığında verileri depolamak için dağıtılmış bir cache yapısının kullanıldığı yapılardır. Cache, istekleri işleyen sunucular arasında paylaşılır. İstemci için önbelleğe alınmış veriler varsa, bir istemci gruptaki herhangi bir sunucu tarafından işlenen bir istek gönderebilir.
Altta verecegim linkte 2 ayrı proje oluşturdum, bu iki uygulamada in-memory cache ve distributed cache(redis) örneklerine erişebilirsiniz.
Distributed Cache & Redis
İlk adımda docker üzerinde redis uygulaması ayağa kaldıralım, docker hub üzerinden redis uygulamasını localinize çekebilirsiniz,
$ docker pull redis
daha sonra docker üzerinde bir redis instance’i olusturmak için alttaki kodu cli üzerinde çalıştırın,
$ docker run --name some-redis -d redis
Redis hazir olduğuna göre bir api ile haberleşmesini sağlayabiliriz, .net api uygulamamızı oluşturup gerekli redis paketleri yükleyip konfigurasyonları yapalım,
paketler
StackExchange.Redis.Extensions.AspNetCore
StackExchange.Redis.Extensions.Newtonsoft
paketlerini nuget üzerinden yükleyebilirsiniz.
konfigurasyon için appsettings.Development.json ve Startup.cs classımızı düzenleyelim
appsettings.Development.json
Startup.cs
Endpoint
Son olarak controller üzerinde metodlarımızı olusturup uygulamamızı test edebiliriz
uygulamamızı run edip swagger üzerinden key-value şeklinde ilk verimizi kayit edelim
verimiz kayit edildi şimdi key değer ile kayit ettiğimiz veriyi geri cağıralım
görüldüğü üzere .net web api uygulamız ile dağıtık şekilde docker üzerinde çalışabilen redis içerisine veri saklayıp kullanabiliyoruz.
In-memory cache
.Net frameworkü içerisinde IDistributedCache interface’ini kullanarak uygulama ile aynı sunucu üzerinde verilerimizi memoryde saklayabiliriz IDistributedCache interface’inin adı sizi yanıtlmasın distributed olarak çalışmamakta, uygulama ile cache aynı sunucu üzerinde olmak zorundadır.
konfigurasyon için Startup.cs classımızı düzenleyelim
Extension
IDistributedCache interface’i cache’i byte array olarak return ediyor bu sebeple byte’i istediğimiz tipte dönebilmek için projemize IDistributedCache için bir extension ekleyelim.
Endpoint
Son olarak controller üzerinde metodlarımızı olusturup get ve set metodları ile uygulamamızı test edebiliriz
uygulamamızı run edip swagger üzerinden key-value şeklinde ilk verimizi kayit edelim, kullanım olarak redis ile aynı oldugunu görebiliriz, ancak çalışma prensipleri farklı.
verimiz kayıt edildi şimdi kayıt ettiğimiz key ile verimizi geri çağıralım
evet testimiz başarılı, .net üzerinde IDistributedCache interface’ini kullanarak in-memory bir uygulama oluşturmuş olduk.
Teşekkürler..