.Net Core ile In Memory ve Distributed Caching(Redis)

Arif Köken
Kodcular
Published in
2 min readSep 4, 2020

Merhaba sevgili yazlım aşıkları,

Bir önceki yazımızda In-Memory Caching ve Distributed Caching kavramlarını açıklamıştım. Bu yazıda .Net Core Platformunda bu cacheleme yöntemlerininin nasıl kullanabileceğini anlatmaya çalışacağım.

In-Memory Cache Kullanımı

Verilerimizi .Net Core ortamında In-Memory Cache yöntemiyle cachelememiz için iki adım gerekli

Birinci Adım: ConfigureServices methodu içerisinde servis eklememiz gerekli. Projemize In-Memory yapılandırmasını eklemek için MemoryCache servisine ihtiyacımız var. Bu service Asp.Net Core projesi içerisinde default olarak kurulu geliyor. Startup dosyası içerisinde ConfigureServices methodu içince IserviceCollection interfacezi içinde gelen AddMemoryCache() yardımıyla bu service ekleyebiliriz.

pulic void ConfigureServices(IserviceCollection services){
services.AddMemoryCache();
}

İkinci Adım: Herhangi bir Controller constructor methodunda dependency injection olarak IMemoryCache interface ini geçeriz IMemoryCache interface aracılıyla gelen methodlar üzerinden Cacheleme işlemimizi gerçekleştirebiliriz.

public class ProductController:Controller{
private IMemoryCache _memoryCache;
public ProductController(IMemoryCache memoryCache)
{
_memoryCache=memoryCache;
}
public IActionResult Set(){
_memoryCache.Set<string>(“zaman”,DateTime.Now.ToString());
}
public IActionResult Get(){
_memoryCache.Get<string>(“zaman”);
}
}

Distributed Cache Kullanımı(Redis)

Verilerimizi .Net Core ortamında Distributed Cache yöntemiyle cachelememiz için dört adım gerekli

Birinci Adım: İlk olarak redis kurulumu yapmamız gerekiyor. Eğer redis kurulumu yapılmıssa bu adımı atlayabilirsiniz. Ben docker üzerinde redis ayağa kaldıracağım. Siz değişik yöntemler kullanabilirsiniz. Bu yazının konusu olmadığı için bu bölümü hızlı geçeceğim.

Redis NoSql veritabanını docker üzerinde aşağıdaki kodla ayağa kaldırabiliriz. Tabi bu komutu çalıştırabilmek için docker ortamının bilgisayarımızda kurulu olması gerekmektedir.

docker run -p 6380:6379 — name some-redis -d redis

Cli üzerinde docker komutlarını çalıştırabilmek için redis-cli npm paketini kurmamız gerekiyor.

npm install -g redis-cli

Cli üzerinden redisdbye bağlanmak için aşağıdaki komutu kullanabiliriz.

rdcli -h localhost -p 6380

Redis dbye bağlandıktan sonra string veri tipinde veri ekleyip bu veriyi okumak için aşağıdaki komutları kullanabiliriz.

set name arif //name keyine arif değerini ekler.
get name //name keyini getirir.

Bu bölüme kadar sorun yoksa artık .Net Core ortamında redis dbyi kullanmak için gerekli adımlara geçebiliriz.

İkinci Adım: Nuget paket manager aracılıyla “Microsoft.Extensions.Caching.StackExchangeRedis” paketini kurmamız gerekiyor.

Redis veritabanına veri türlerinden bağımsız bir şekilde string olarak data ekleyip okumak için aşağıdaki kütüphane kullanılabilir.

Üçüncü Adım: Projemize Distributed cache yapılandırmasını eklemek için StackExchangeRedisCache servicene ihtiyacımız var. Bu service Asp.Net Core projesi içerisine bir önceki adımda Nuget üzerinden gerekli paketin kurulumunu yapmıştık. Startup dosyası içerisinde ConfigureService bölümüne IserviceCollection interface aracılıyla gelen AddStackExchangeRedisCache() methodu yardımıyla bu service eklememiz gerekiyor. Redisin ”localhost:6380" den yayın yaptığı varsayılmıştır.


pulic void ConfigureServices(IserviceCollection services)
{
services.AddStackExchangeRedisCache(options=>{
options.Configuration=”localhost:6380";
});
}

Dördüncü Adım: Herhangi bir Controller constructor methodunda dependency injection olarak IDistributedCache interface ini geçeriz IDistributedCache interface aracılıyla gelen methodlar üzerinden Cacheleme işlemimizi gerçekleştirebiliriz.

public class ProductsController : Controller
{
private IDistributedCache _distributedCache;
public ProductsController(IDistributedCache distributedCache)
{
_distributedCache = distributedCache;
}
public void Set()
{
_distributedCache.Set("zaman", Encoding.UTF8.GetBytes(DateTime.Now.ToString()));
}
public string Get()
{
return Encoding.UTF8.GetString(_distributedCache.Get("zaman"));
}
}

Yararlı olması dileklerimle. İyi çalışmalar diliyorum.

--

--