C# ile Redis Kullanımı ve İlk Örnek

Herkese merhaba, yine güzel bir konu ile güzel ve faydalı bir makale yazmaya karar verdim. Yenilikçi bakış açım nedeniyle devamlı farklı bir şeyler arayışı içerisindeyim. karşılaştığım problemleri ya da yaptığım bir işi nasıl daha iyi yaparım, nasıl daha hızlı çözebilirim düşüncesi daima aklımda gezinir durur sadece yapılması istenen şeyi yapmak ve orada bırakmak benim tarzım değildir hayat bir değişimdir ve biz insanlar “değişim felsefesi” ni daima yaşamalı ve değişime ayak uydurmalıyız

Bu sebeple veri depolama ve veriler üzerinde çalışmanın yeni ve bana göre oldukça kullanışlı bir yöntemi olan NoSQL veritabanlarından biri olan Redis veritabanı sistemini ve C# ile implementasyonunu içeren bir örneği bu makalede paylaşacağım. Daha önce MongoDB veritabanı sistemini incelediğim makalemde NoSql ile ilgili bilgiler paylaşmıştım Buradan ulaşabilirsiniz. Redis; 2009 yılında geliştirilmeye başlanmış, ismi Remote Dictionary Server kelimelerinin baş harflerinden oluşan, C programlama dili ile yazılmış, açık kaynak kodlu, bellek kullanımlı (Ram üzerinde çalışan fakat diske de kaydedilebilen), key-value tipinde ve server-client yapısında çalışan bir veritabanıdır. Redis Labs tarafından geliştirilmektedir ve C/C++, C#, PHP, Python, Java, Go, Ruby gibi bir çok popüler dil tarafından desteklenmektedir.

Redis genellikle bir projede ana veritabanı olarak değil ikincil veritabanı olarak Cache işlemlerinde kullanılır. Örneğin bir Asp.Net projesinde ana verilerinizi MsSql’de tutarken Session verilerinizi Redis’de tutabilirsiniz. Buna neden gerek var? diye sorarsanız eğer tek server ile çalışıyorsanız çok gerek olmayacaktır fakat birden fazla server ile çalışıyorsanız ya da uygulamanız ile session state verilerinizi ayrı server’larda tutmak istiyorsanız redis iyi bir çözüm olacaktır.

Şimdi C# kullanarak bir Consol uygulaması üzerinden Redis örneği yapalım. İlk önce Redis Server uygulamasını bilgisayarınıza ya da sunucunuza indirip kurmanız gerekir. Buradaki Github deposundan Windows için indirebilirsiniz. İndirdiğiniz zip dosyasını ayıkladıktan sonra \redis-windows-master\src\msopentech\redis-64.2.8.2101 yolundan uygulamaların olduğu dizine geçin. redis-server.exe isimli uygulamaı çalıştırın eğer bir problem yoksa aşağıdaki gibi bir görüntü olması gerekiyor.

Bu işlem ile Redis sunucumuzu çalıştırdık ilerleyen makalelerde redis’i windows servis olarak çalıştırmanın yöntemini göstereceğim. Şimdi Visual Studio üzerinden yeni bir Consol uygulaması açın. Nuget üzerinden ServiceStack.Redis aramasını yapın ve ServiceStack.Redis 3.9.x Complete Library ismindeki kütüphaneyi projenize ekleyin. Projenize ServiceStack ile başlayan bazı kütüphanelerin eklenmiş olması gerekir. Program.cs dosyanızın içeriği aşağıdaki gibi olabilir.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ServiceStack.Redis;
using ServiceStack.Redis.Generic; 

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var redisclient = new RedisClient("localhost", 6379);
            IRedisTypedClient person = redisclient.As<person>();
        }
    }
    public class person
    {
        public int id { get; set; }
        public string isim { get; set; }
    }
}

Yeni bir veri eklemek için IRedisTypedClient sınıfının Store metodunu kullanın.

class Program
{
   static void Main(string[] args)
   {
     var redisclient = new RedisClient("localhost", 6379);
     IRedisTypedClient person = redisclient.As<person>();

     person.Store(new person() { id = 34, isim = "tayyip yetiş" });
   }
}

Verileri listelemek için GetAll metodunu kullanın. Bu metod ile aynı tipteki verileri getirirsiniz Linq ile filtreleme yapabilirsiniz.

class Program
{
   static void Main(string[] args)
   {
     var redisclient = new RedisClient("localhost", 6379);
     IRedisTypedClient person = redisclient.As<person>();

     foreach (person item in person.GetAll())
     {
        Console.WriteLine(item.isim);
     }
   }
}

Fakat bu metot tüm verileri getirdikten sonra filtreleme yapmanızı sağlar bu bazı durumlarda fazladan işlem ve trafik kaybına sebep olur. Bunun için Get<T> metoduyla key değerine göre veri getirebilirsiniz. eğer Store metoduyla depolama yaptıysanız key değeri otomatik oluşturulacaktır dolayısıyla sorgulama yaparken aşağıdaki gibi yapmalısınız

class Program
{
    static void Main(string[] args)
    {
       var redisclient = new RedisClient("localhost", 6379);
       IRedisTypedClient person = redisclient.As<person>();

       person result = redisclient.Get<person>("urn:person:34");
    }
}

Eğer key değerini kendiniz vermek istiyorsanız Store yerine Set<T> metodunu kullanın

var result = redisclient.Set<person>("123", new person { id = 324, isim = "hasan" });

Buraya kadar yaptığınız tüm işlemler bellekte gerçekleştirildi dolayısıyla sunucunun kapanması, yeniden başlaması vs. gibi durumlarda veri kaybınız kaçınılmaz olur bu sebeple verileri eşzamanlı olarak diske kaydetmeniz verilerinizi korumanıza yardımcı olur fakat garanti etmez. Save metoduyla Redis verilerinizi default olarak dump.rdb isimli bir dosyaya kaydeder.

redisclient.Save();

Bu şekilde Redis Nosql veritabanının C# ile basit bir kullanımını gördük. Umarım faydalı olmuştur.

 

Mustafa Tayyip YETİŞ
Yazılım Geliştirme Uzmanı

0.0 Ort. (0% puan) - 0 oy

1 Yorum

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir