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

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

Açık kaynak kodlu bir yazılım olan Memcached, istemci-sunucu mimarisini kullanmaktadır veriler anahtar değer şeklinde ilişkisel diziler halinde sak...

Merhaba arkadaşlar bu makalede son zamanlarda yoğun olarak üzerinde durduğum NoSql veritabanlarından biri olan Memcached ile ilgili temel bilgiler verip bir örnek paylaşacağım. Daha önceki MongoDB makalesini ve Redis makalesini buradaki linklerden inceleyebilirsiniz. Memcached ilk olarak 22 Mayıs 2003 tarihinde Brad Fitzpatrick tarafından kendi websitesi olan LiveJournal için geliştirilmiştir. Başlangıçta Perl dili ile yazılmış sonradan C diline çevrilmiştir. Genellikle web sayfalarının html çıktılarını önbelleğe alıp statik hale getirerek hızlandırmak ya da veritabanı sorgu sonuçlarını cache'e alıp veritanına destek olmak için kullanılır. Tamamen RAM'den çalıştığı için ve verileri diske yazmadığı için oldukça hızlı çalışır eğer amacı dahilinde kullanırsanız bunun pek bir dezavantajı yoktur fakat önemli verilerinizi depolamak isterseniz ciddi problemlerle karşılaşabilirsiniz sununun herhangi bir sebepten kapanması ya da en azından server uygulamasının kapanması kilitlenmesi durumunda verileriniz uçar.

Açık kaynak kodlu bir yazılım olan Memcached, istemci-sunucu mimarisini kullanmaktadır veriler anahtar değer şeklinde ilişkisel diziler halinde saklanır. Anahtar maksimum 250 bayt değerler ise 1 megabayt uzunluğunda olabilir. x86 mimarisinde maks. 4 GB, x64 de ise maks 16 milyon terabayt veriyi bellekte tutabilirsiniz. Bunun yanında PHP, Perl, C# gibi popüler programlama dilleri ile kullanılabilir. Şimdi C# ile bir örnek yapalım. Bu örnek Visual Studio 2012 de yapılmıştır.

Öncelikle buradaki adresten windows için Memcached Server uygulamasını indirin. Zip içerisinde memcached.exe isimli uygulamayı çalıştırın. Bu işlemle Sunucu default olarak 11211 portundan hizmet vermeye başladı. Yeni bir Console uygulaması açın Nuget ile EnyimMemcached paketini indirin. Package Manager ile Install-Package EnyimMemcached komunutunu kullanarak da indirebilirsiniz.

using Enyim.Caching;
using Enyim.Caching.Configuration;
using Enyim.Caching.Memcached;
 
public class Class1
{
     public static void Main()
     {
         MemcachedClientConfiguration config = new MemcachedClientConfiguration();
         config.AddServer("127.0.0.1", 11211);
         config.Protocol = MemcachedProtocol.Binary;
         MemcachedClient client = new MemcachedClient(config);
 
     }
}

Veri depolamak için Store metodunu kullanabilirsiniz. Bu örnekte Person isimli bir nesneyi depolayacağız. Key olarak kisi değerini kullandık.

public class Class1 {
    public static void Main() {
        MemcachedClientConfiguration config = new MemcachedClientConfiguration();
        config.AddServer("127.0.0.1", 11211);
        config.Protocol = MemcachedProtocol.Binary;
        MemcachedClient client = new MemcachedClient(config);
 
        bool result = client.Store(StoreMode.Set, "kisi", new Person {
            Name = "Tayyip",
            Age = 27
        });
    }
} 
 
[Serializable]
class Person {
    public string Name { get; set; }
    public int Age { get; set; }
}

Depoladığınız veriyi sorgulamak için Get metodunu kulllanabilirsiniz.

public static void Main()
{
    MemcachedClientConfiguration config = new MemcachedClientConfiguration();
    config.AddServer("127.0.0.1", 11211);
    config.Protocol = MemcachedProtocol.Binary;
    MemcachedClient client = new MemcachedClient(config);
 
    bool result = client.Store(StoreMode.Set, "kisi", new Person { Name = "Tayyip", Age = 21 });
 
    Person value = client.Get("kisi");
}
 
 
 

Liste halinde verilerinizi de yukarıdaki gibi tutabilirsiniz. 1.000.000 adet veriniz var ise bunları ayrı key ler halinde değil de tek bir key içinde tutabilirsiniz.

public static void Main()
{
    MemcachedClientConfiguration config = new MemcachedClientConfiguration();
    config.AddServer("127.0.0.1", 11211);
    config.Protocol = MemcachedProtocol.Binary;
    MemcachedClient client = new MemcachedClient(config);
 
    List kisiler = new List()
    {
        new Person { Name = "Mustafa", Age = 21 },
        new Person { Name = "Tayyip", Age = 54 },
        new Person { Name = "Yetiş", Age = 23 }
    };
    bool result = client.Store(StoreMode.Set, "kisiler", kisiler);
 
    List<Person> value = client.Get<List<Person>>("kisiler");
}

Veriyi silmek için klasik Remove komutunu kullanabilirsiniz.

bool result = client.Remove("kisi");

Memcached ile ilgili şimdilik bu örnek yeterli. Temel veri ekleme, silme işlemlerini gerçekleştirdik. Güncelleme işlemi için aynı key i tekrar Set edebilirsiniz. Umarım faydalı olmuştur.

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

M.Tayyip Yetiş
Yazılım Geliştirme Uzmanı
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git