ASP.NET Core Projelerinde Redis İmplementasyonu

Arkadaşlar herkese selamlar. Bu yazımda Redis nedir? ASP.NET Core projelerinde Redis nasıl implemente edilir bu konulardan bahsedeceğim.

Nedir bu Redis?

Remote Dictionary Server (Redis) verileri key-value olarak saklayan bir NoSQL veritabanıdır. C programlama dili kullanılarak yazılmıştır. Tamamen open source olarak Github üzerinde bulunmaktadır. (https://github.com/redis/redis)

Redis bize ne sağlar?

Redis verileri bellek üzerinde tuttuğu ve buradan yazma ve okuma yaptığı için çok hızlı çalışır. Bu sayede uygulamalar üzerinde cache altyapısı olarak kullanılır ve cache üzerinden okunmak istenen veriler Redis veritabanına yazılır.

Cache mekanizması yanında Redis Session bilgilerini saklamak için de kullanılabilir. Çünkü çok hızlı sürelerde okuma yapabildiği için Session bilgileri için kullanımı gayet uygundur.

Redis Kurulumu

Redis’in Windows işletim sistemi üzerinde kurulumundan kısaca bahsedeceğim.

İlk olarak yapmanız gereken işlem Github release kısmından size uygun olan Redis versiyonunu seçip, “.msi” dosyasını indirerek kolayca kurulumunu yapmaktır.

https://github.com/microsoftarchive/redis/releases

Sonrasında bilgisayarınızda Program Files -> Redis klasörü altında aşağıdaki dosyaları içeren bir klasör oluşacaktır.

Burada redis-server.exe’ye çift tıkladığımızda sunucuyu local bilgisayarımız üzerinde çalıştırmış olacağız. Bunun ardından redis-cli ile sunucu çalışma durumunu test edebiliriz. Aşağıdaki şekilde bir key için value set edip sonrasında okuyarak kontrol edebilirsiniz.

ASP.NET Core üzerinde implementasyonu

Bilgisayarımıza redis-server kurup testini yaptıktan sonra sıra geldi ASP.NET Core projemize Redis implementasyonu yapmaya. Bir ASP.NET Core Web Api projesi üzerinden anlatım yapacağım.

Projenin genel dosya yapısı aşağıdaki gibi.

İlk olarak Startup.cs dosyası içerisinde ConfigureServices methoduna Redis kullanacağımızı ve bunu kullanacağımız port ve sunucu bilgisini setliyoruz.

Bu sayede artık Controller veya farklı sınıflar üzerinde Redis servisini inject ederek rahatça sunucumuza erişip kayıt atabilir veya okuyabiliriz.

Bu uygulama ile benim amacım eğer kullanıcı hesapları Redis üzerinde var ise oradan okumak eğer yoksa BankingOperationService üzerinden okuyup Redis sunucuma yazmak.

2. adım olarak Controller açıyoruz. İlk olarak Dependency injection yöntemi ile Redis sunucu erişimi için kullanacağımız nesneyi ve bankacılık servisi için gerekli nesneyi Controller sınıfımıza ekliyoruz.

Sonrasında aşağıdaki kod ile tüm işlemlerimi yapıyorum. Bu işlemlere yazının devamında parça parça değineceğim.

Kırmızı bölüm ile aslında Redis sunucumuza gidip, servisi çağırırken kullanılan branchId önceden Redis sunucu üzerine yazıldı mı, burada bulunuyor mu bunu kontrol ediyoruz.

Sarı bölümde eğer sorguladığımız branchId Redis sunucumuzda bulunuyor ise bunu öncelikle okuyup string olarak alıyoruz. Burada ben JSON olarak Redis’e yazıp tekrar JSON olarak okuyorum. Bu string Deserialize ediyoruz ve bu sayede kullanıcı listesini Redis üzerinden okumuş oluyoruz.

Mavi bölümde ise eğer sorguladığımız branchId Redis sunucumuzda yok ise, bunu BankingOperationService üzerinden okuyup sonrasında JSON olarak serialize ediyoruz. Sonra olarak JSON olarak serialize ettiğimiz nesneyi string bir değişkene atıyoruz. Burada farklı olarak gözümüze çarpan kısım options nesnesi. Burada options nesnesi üzerine 2 adet zaman tanımı yapıyoruz.

AbsoluteExpiration : Verinin cache üzerinden tutulma süresini belirlemektedir.

SlidingExpiration : Verinin verilen AbsoluteExpiration süresi içerisinde çağırılır ise verinin tutulma süresini bir o kadar daha uzatmasını sağlar.

Özet

Yazdığımı kod ile Redis sunucumuzu kontrol ediyoruz eğer önceden yazılmış veri var ise kullanıyoruz, yok ise gidip servisten okuyup tekrar Redis üzerine yazılmasını sağlıyoruz.

Projeye Github hesabım üzerinden ulaşabilirsiniz.

Elimden geldiği kadar Redis konusunu anlatmaya çalıştım. Okuduğunuz için teşekkür ederim, paylaşım ve alkışlar motivasyonu artıracaktır 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *