Asp.Net Core’da In-Memory Cache Kullanımı ve Redis Implementasyonu

Salih Koç
3 min readFeb 28, 2021

--

Selam arkadaşlar,

Asp.Net Core’da In-Memory Cache ve Redis kullanımı hakkında yol gösterici bir yazı yazmak istedim. Bu makalenin içeriğinde In-Memory Cache Nedir? veya Redis Nedir? sorusundan ziyade proje içerisinde Nasıl kullanılır? sorusunu cevaplayacağız.

In-Memory Cache Kullanımı:

Öncelikle Asp.Net Core’da InMemory Cache Kullanabilmemiz için Startup.cs içerisindeki Configure Services altına AddMemoryCache() servis olarak eklenmesi gerekmektedir.

Görsel 1

Bir datayı Cache’leyebilmek için bir class’ın constructor’ında IMemoryCache interface’ini bir DI(Dependency Injection) olarak geçtiğimiz zaman artık bu interface üzerinden gelen metotları kullanarak datayı cache’leyebiliriz.

Görsel 2

In-Memory Cache Get ve Set Kullanımı:

Görsel 3

Yukarıdaki kod örneğinde görüldüğü üzere, Product Controller index sayfasına istek atıldığında, o anki zamanı “time” key ismi ile cache’e alır. Product Controller/Show Sayfasına istek atıldığında ise “time” key’i verilerek cache’deki bilgi okunur.

In-MemoryCache interface’inin bize sağladığı pek çok method bulunmaktadır, bunlardan sadece 2 tanesini kullanarak örnek gösterdik. Diğer methodlar hakkında araştırmalar yapabilirsiniz. Aynı zamanda cache’de tutulacak verilere süre vermek için Absolute Expiration ve Sliding Expiration kavramlarını araştırmanızı öneririm. Cache atılacak data’da önceliklendirme için Cache Priority kavramıda işinize yarayabilir.

Asp.Net Core’da Redis Implementasyonu:

Görsel 4

Asp.Net Core’da Redis Üzerinde daha fazla hakimiyet elde edebilmek ve Redis tarafındaki veri tipleriyle daha rahat çalışabilmek için StackExchange Redis API kullanacağız. Bu API üzerinden Redis tarafındaki tüm veri tipleri ile çalışabilir ve aynı zamanda Redis CLI tarafındaki komutların çoğunu Redis API ile bize birer method olarak gelecektir.

Öncelikle Projemizde Redis StackExchange API’yi kullanabilmemiz için Manage Nuget Packages üzerinden StackExchange.Redis kütüphanesini indirmemiz gerekmektedir.

StackExchange.Redis’i uygulamalarımızda kullanabilmek için bir Dependency Injection şeklinde kullanabiliriz.

Projemizde Services adında bir klasör oluşturalım. Bu Services klasörünün altında bir tane class oluşturalım. Class ismine ben “RedisService” verdim.

Öncelikle AppSettings.Json içerisinde Redis’e bağlanacağımız Host ve Portu belirtiyoruz.

Görsel 5

RedisService class’ımızın içerisini aşağıdaki görsel’deki gibi düzenliyoruz.

Görsel 6

Görsel 5'teki yapılan kodlamaya baktığımızda, öncelikle AppSettings.Json içerisindeki Redis Host ve Port numarasına IConfiguration interface’i kullanarak DI Yöntemiyle ulaşıyoruz. Daha sonra bizim Redis Server ile haberleşmemiz için gereken bir class olan ConnectionMultiplexer class’ını ekliyoruz. Daha sonra Redis içerisindeki hangi db’yi kullanacağımızı ve hangi db’ye cache’leme yapacağımızı belirtmek için IDatabase interface’ini ekliyoruz. Connect() methodu oluşturarak IConfiguration ile appsettings.json içerisinden aldığımız host ve port adreslerini bir configstring’e atıyoruz. Ardından ConnectionMultiplexer class’ı ile Redis Server’a Connect() methoduna verilen configstring ile bağlanıyoruz. GetDb() Methodu oluşturuyoruz. Bu Method ile Redis’teki hangi db’ye cache’leme yapabileceğimizi ayarlayabiliyoruz. En son olarak Server ilk ayağa kalktığında Redis’inde ayağa kalkması için Startup.cs içerisindeki Configure methoduna RedisService class’ını aşağıdaki gibi tanımlıyoruz.

Görsel 7

Ardından Startup.cs içerisinde yapmamız gereken diğer bir işlem ise bizim RedisService ‘i herhangi bir class’ın constructor’ında Dependency Injection olarak kullanabilmemiz için ConfigureServises altında RedisService’i Singleton olarak eklememiz gerekmektedir.

Görsel 8

Bu işlemlerden sonra RedisService class’ımızı kullanmak istediğimiz herhangi bir Class içerisinde DI olarak geçtikten sonra kullanabilir, ve Redis’e Cache’leme yapabiliriz.

Redis Implementasyonu hakkında internetten pek çok fazla implementasyon örneği bulabilirsiniz. Bu yöntem sadece onlardan birisidir.

Umarım In-Memory Cache ve Redis Cache implementasyonu hakkında size yararlı bir makale olmuştur. İyi çalışmalar dilerim.

--

--

Salih Koç
Salih Koç

No responses yet