Asp.Net CORE (5.0)’da Redis (IDistributedCache) Kullanımı
Asp.net Core’da Redis (IDistributedCache) Kullanımı…
Selamlar,
Önceki yazılarımda Redis Nedir ? ve Redis Kurulumu konularından bahsetmiştim. Bu yazımda Redis’in Asp.Net Core’da nasıl kullanıldığını basitçe anlatmaya çalışacağım.
Bunun için iki yöntemimiz var ;
1. IDistributedCache interface implementasyonu
2. Daha farklı bir API implementasyonu yapmanız gerekiyor. Örnek ; StackExchange.Redis API ‘ını kullanabilirsiniz.
İki yöntem arasında ne gibi farklar var ?
IDistributedCache interface’i üzerinden sadece “GET” ve “SET” methodlarına sahibiz. Eğer çok fazla veri tipiyle çalışmak ve işlem yapmak istemiyorsanız “IDistributedCache” kullanışlı olacaktır. Çünkü implementasyonu daha hızlıdır. (List,Hash,Set vb kullanamazsınız.)
İkinci yol ise ; Redis üzerindeki tüm veri tiplerini kullanarak daha fazla hakimiyet sağlamak istiyorsanız yani redis-cli aracılığıyla mevcut olan tüm komutları kullanmak istediğinizde daha farklı bir API kullanarak uygulamanızı oluşturmanız gerekiyor.
Bu yazımda IDistributedCache kullanımını anlatmaya çalışacağım. Daha önceki yazımda (buradan) iki farklı yöntemle nasıl kurulacağını anlatmıştım. “Chocolatey(windows)” ile Redis kurulumunu tamamlamış olarak ilerleyeceğim.
Redis’e kaydettiğiniz data’yı görmek için’de iki yöntem var ;
- RDM (Redis Desktop Manager) indirip gelen arayüzden görebilirsiniz. (14 gün deneme sürümünden sonra ücretli)
- Redis-cli üzerinden ilgili komutlar yardımıyla görebilirsiniz.
Adım adım başlayabiliriz…
Asp.net Core + Redis (IDistributedCache)
Nelerden bahsedeceğiz ?
1. AddStackExchangeRedisCache servisi ve IDistributedCache interface implementasyonu
2. Basit dataların kaydedilmesi
3.Complex Type’ların cachlenmesi
4. Async Kullanımı
5. Dosyaların cachlenmesi
Öncelikle Redis-Server’ın ayakta olması gerekiyor. İlk olarak paket yöneticisiyle yüklemiş olduğum Redis-Server’ı ayağa kaldırıyorum.
1. AddStackExchangeRedisCache servisi ve IDistributedCache interface implementasyonu
İmplementasyon için önce; “Microsoft.Extensions.Caching.StackExchangeRedis” kütüphanesini indirmem gerekiyor.
Daha sonra Startup.cs içinde kütüphaneyle birlikte gelen “AddStackExchangeRedisCache” servis’imi ekliyorum.
Servisi eklerken, Redis-server’ımı ayağa kaldırırken kullandığım port ve host bilgisini de eklemem gerekiyor.
Servisi ekledikten sonra IDistributedCache interface’ini implemente etmemiz gerekiyor. Hangi Controller’da kullanacaksak inject işlemi yapmamız gerekiyor.
Farklı Bir yöntem olarak ;
Tekrar tekrar her Controller için inject işlemi yapmakla uğraşmak istemiyorsak , BaseController oluşturup inject işlemini bu Controller üzerinden yapıp , diğer Controller’lara inherit edebiliriz.
İmplementasyon’umuzu tamamladık, şimdi Cache işlemlerine geçebiliriz.
2. Basit dataların kaydedilmesi
_distributedCache altında “SetString” methodunu kullanabiliriz. Kaydetme işlemimiz Key-Value mantığında olacaktır.
Verdiğimiz key’ler : username , takim, renk
Verdiğimiz value bilgileri : ibrahim,Galatasaray, sarikirmizi
Ve de Cache’te ne kadar durması gerektiğini belirttik. (AbsoluteExpiration)
Bunları cache’ten okumak için de “GetString” methodunu kullanıyoruz. ;
3.Complex Type’ların cachlenmesi
Class’ları cache’lemek için iki farklı yöntem kullanabiliriz.
- Json Serialize İşlemi
Set İşlemi için elimizdeki objeyi jsonSerialize işlemine sokuyoruz ve json Data olarak saklayabiliyoruz.
Cache’lediğimiz datayı okumak için Deserialize işlemi yapıyoruz.
2. Binary Serialize İşlemi
Set İşlemi için json’a çevirdiğimiz objeyi byteArray olarak saklayabiliriz.
Get işlemi için tekrar Deserialize işlemi gerçekleştiriyoruz.
Eğer cache’ten silmek istiyorsak “Remove” methodunu kullanıyoruz ;
4. Async Kullanımı
Cache’lemek istediğimiz datayı asenkron işlem ile saklayabiliyoruz.
Set işlemi ;
Methodumuzda “async Task” keyword’u ve “await” keyword’ünü kullanmamız gerekiyor.
5. Dosyaların cachlenmesi
Resim , pdf vs. cache’lemek istiyorsak ilk önce dosyamızın fiziksel olarak uygulamamızda olması gerekiyor.
Set işlemi için ;
İlk önce dosyamın bulunduğu “path” i alıyorum. Daha sonra dosyamı byteArray olarak okuyup cache işlemimi tamamlıyorum.
Get işlemi için ;
Bitirirken
Bu yazımda Redis(IDistributedCache)’in Asp.Net Core’da nasıl kullanıldığını anlatmaya çalıştım .
Örnek projeye buradan ulaşabilirsiniz.
Umarım faydalı olmuştur.
Başka bir konuda görüşmek üzere…