Merhaba Arkadaşlar,
Bugün Windows işletim sistemi üzerinde .NetCore 2.1 ve Redis ile basit bir uygulama yaparak cache mekanizmasının nasıl kullanıldığı ile ilgili ufak bir örnek yapacağız.
Öncelikle redis ve distributed cache kavramı hakkında kısaca bilgi vereyim. Distributed cache, verilerin merkezde saklandığı ve diğer sunuculara iletilebildiği klasik master-slave yapısnın kurulabildiği, sunuculardan biri çökse bile cache verilerinin devam ettirilebildiği, yatay genişleme yapılabilen (ek sunucular) cache sisteme verilen addır.
Cache performans arttırmak ve hızlı cevap süresi için kullanılır. Şuan da kullanılan en popüler cacheleme sistemlerinden birisi de redis cache kullanmaktır.
Redis, NoSql bir key-value store dur. En önemli avantajı hızlı olmasıdır, bunun sebebi verileri bellekte tutmasından kaynaklanmaktadır. Diğer bir avantajı ise verileri String, List, Hash, Set, Bitmap gibi farklı türlerde saklayabilmesidir.
Ayrıca verilerin kaybolmaması istendiği durumlarda Snapshotting (Snapshotların periyotlar halinde alınarak diske aktarılması) ya da verilerin hem belleğe hem diske yazılması gibi yöntemler uygulanabilmektedir.
Örneğe başlamadan önce bilgisayarımızda .NetCore ve Redis kurulu olmalıdır. Redisin windows kurulumu için farklı alternatifler olsa da Windows paket yükleyicisi olan Chocolatey üzerinden kurulumu benim için daha rahat olmuştu. Bunun için komut satırı, yönetici olarak açılarak
@”%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe” -NoProfile -ExecutionPolicy Bypass -Command “iex ((New-Object System.Net.WebClient).DownloadString(‘https://chocolatey.org/install.ps1’))” && SET “PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin”
aşağıdaki komut ile önce Chocolatey kurulmuş olur daha sonra,
choco install redis-64
komutu ile redisi yükleriz. Yükleme bittikten sonra aşağıdaki ekranın gelmesi beklenir. Daha sonra yine redise ulaşmak istediğimizde aşağıdaki komutu yazmamız yeterli olacaktır. “redis-server”

Redis serverımızın çalıştığından emin olmak için basit bir değer tanımlaması ve çağırması yapalım. Bunun için başka bir komut satırı açılarak “redis-cli” yazılır ve aşağıdaki komutlar girilir.

Daha sonra bir .net core projesi açarak ( -cli üzerinden dotnet new mvc diyerek yada Visual Studio/VS Code New project/asp.net core web application/web application model-view-controller seçilerek açılabilir. ) nuget üzerinden “Microsoft.Extensions.Caching.Redis” paketini yükleyelim ve startup sınıfımızı aşağıdaki gibi düzenleyelim.
Startup.cs / ConfigureServices
services.AddDistributedRedisCache(options =>
{
options.InstanceName = “RedisNetCoreSample”;
options.Configuration = “localhost:6379”; //Sizin redis bağlantınız.
});
ardından oluşan template içerisinde HomeController’a gelerek constructorda oluşturduğumuz model için bir liste tanımlayalım.

Gelelim About Actionımıza burası kilit nokta diyebilirim. Asıl işlemi burada yapıyoruz. Parametre olarak aldığımız idye ait bir kayıt cache de bulunuyor mu diye kontrol ediyoruz. Eğer kayıt yok ise listeden ilgili kaydı bularak bunu ekrana gönderirken cache içerisine de ekliyoruz. Burada ki JsonConvert işlemleri objeyi dönüştürmek için kullanılmıştır. Bunun için çoğunuzun bildiği Newtonsoft.Json kütüphanesinden yararlanılmıştır. Eğer kayıt var ise yanı cache de bu idli kayıt bulunuyorsa bunun cacheden geldiğini belirtmek için objenin name propertysi başına “CACHE” ekliyoruz.

Örnek bir controllerda basit bir şekilde Redis Cache de değer varsa aldık ve okuduk, eğer değer yoksa Redis Cache içerisine ekledik.
Projenin kaynak koduna https://github.com/EnesAys/NetCoreandRedis adresinden ulaşabilirsiniz.
Umarım faydalı olmuştur. Kalın sağlıcakla ..!!