D ile Redis

D programlama dili ile Redis'e başlangıç

Bu makalede D programlama dili ile Redis veritabanına nasıl bağlanabileceğimizi öğreneceğiz.

D dili ile Redis kullanımı

Bu makalede D programlama dili ile Redis veritabanına nasıl bağlanabileceğimizi öğreneceğiz.

Redis anahtar değer türünde bir veritabanıdır.

Eğer daha önce Redis veritabanını hiç kullanmadıysanız etkileşimli bir Redis öğrenme uygulaması olan Redis Öğren uygulamasına bakabilirsiniz.

Anahtar değer türünde veritabanları dışında MongoDB gibi belge türünde veritabanları var. Yapısal sorgulama dili, SQL kullanan veritabanları var.

Redis'in özelliklerinden bir tanesi bağlı liste, torba, eşleme tabloları gibi bazı veri yapıları kullanıyor olması.

Redis kurulumu

Ubuntu

Ubuntu altında Redis kurulumu için şu komutu verebilirsiniz.

$ sudo apt-get install redis-server

Eğer bilgisayarın açılışında Redis hizmetinin kendiliğinden başlamasını istiyorsanız şu komutu verebilirsiniz.

$ sudo systemctl enable redis-server.service

Eğer elle Redis hizmetini başlatmak isterseniz şu komutu kullanabilirsiniz.

$ sudo systemctl start redis-server.service

Redis kurulumunun başarılı olup olmadığını denemek için komut satırında redis-cli aracını kullanabilirsiniz.

$ redis-cli

Eğer Redis sunucusuna bağlantı başarılı olduysa ping yazdığınızda PONG çıktısı görebilirsiniz.

127.0.0.1:6379> ping
PONG

OSX altında kurulum

OSX altında kurulum için aşağıdaki komutu verebilirsiniz.

$ brew install redis

Eğer bilgisayar açılışında Redis hizmetinin başlamasını istiyorsanız şu komutu verebilirsiniz.

$ ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents

"launchctl" aracı ile Redis sunucusunu da başlatabilirsiniz.

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

Redis sunucusunun doğru çalışıp çalışmadığını kontrol etmek için şu komutu verebilirsiniz.

$ redis-cli ping

Eğer PONG çıktısı veriyorsa Redis sunucusuna bağlantı başarılı olmuş demektir.

Windows

Windows altında kurulum her ne kadar Redis geliştiricileri tarafından pek tavsiye edilmese de bu adresten indirip kurabilirsiniz.

Sıkıştırılmış kütüğü açtıktan sonra Redis'i çalıştırmak için redis-server.exe ya da redis-server.exe --maxheap 2gb komutlarından bir tanesini verebilirsiniz.

Daha sonra redis-cli.exe uygulaması ile Redis sunucu bağlantısını test edebilirsiniz.

Redis başlangıç

Eğer kurulu değilse önce D derleyicisi ve DUB paket yöneticisini kurmanız gerekiyor.

Yukarıdaki bağlantıda farklı işletim sistemleri için kurulum adımlarını bulabilirsiniz.

İlk önce çalıştığımız dizinde komut satırında erik isimli bir dizin oluşturalım. Daha sonra bu dizininin içine girelim.

Linux altında bu komutlarla yeni bir dizin oluşturuluyor. Farklı bir işletim sistemi kullanıyorsanız bu komutlar değişebilir.

$ mkdir erik
$ cd erik

İlk önce bu dizinde boş bir D uygulaması oluşturmamız gerekiyor.

$ dub init

Bu bölümde size sorduğu açıklamaları ister girebilirsiniz, isterseniz de Enter tuşuna basarak boş geçebilirsiniz.

Redis'e bağlanmak için Tiny Redis isimli bir kütüphane kullanacağız. Bu kütüphaneyi eklemek için şu komutu vermeniz yeterli olacaktır.

$ dub add tinyredis

Tekrar hatırlatmakta fayda görüyorum. Burada en baştaki $ işaretlerini komut olarak girmiyoruz. Sadece girilen komutların, komut satırına girilmesi gerektiğini göstermek için en başına $ koyuyoruz.

Herhangi bir metin düzenleyici ile kaynak kütüğünü açalım.

$ emacs source/app.d

Dub paket yöneticisinin otomatik oluşturduğu app.d kütüğünün içindeki bilgileri silip yerine şu bilgileri giriyoruz.

import tinyredis;
import std.stdio;

void main()
{
    auto redis = new Redis("localhost", 6379);
    redis.send("SET merhaba dünya");
    writeln ("Merhaba ", redis.send("GET merhaba"));
    auto sonuç = redis.send("DEL merhaba");
    writeln("Sonuç ", sonuç);
    sonuç = redis.send("DEL merhaba");
    writeln("Sonuç ", sonuç);
}

Uygulamayı derleyip, çalıştırmak için

$ dub

komutu verdiğinizde çıktısını görebilirsiniz.

Running ./erik 
Merhaba dünya
Sonuç 1
Sonuç 0

İsterseniz $ ./erik şeklinde ya da bazı işletim sistemlerinde sadece erik yazarak uygulamayı çalıştırabilirsiniz.

Uygulamaya bakacak olursak ilk önce bir tane Redis nesnesi oluşturuyoruz.

SET ile merhaba anahtarının değerini dünya yapıyoruz. GET ile bu değeri okuyor ve ekrana yazıyoruz.

DEL ile bir anahtarı siliyoruz. Eğer başarılı ise bize değer olarak 1 döndürüyor. İkinci kez aynı anahtarı silmeye çalıştığımızda 0 değerinin döndüğüne dikkat ediniz.

Redis liste kullanımı

Redis liste veri yapısı, bir topluluğun her iki ucundan veri ekleyip çıkarabileceğimiz bir topluluk.

RPUSH ile bir listenin sağ tarafına, LPUSH ile ise sol tarafına veri ekleyebiliyoruz.

Benzer şekilde RPOP ile listenin sağından LPOP ile listenin solundan eleman çıkarabiliyoruz.

Uygulamanın kaynak kütüğünü aşağıdaki gibi değiştirelim.

import tinyredis;
import std.stdio;

void main()
{
    auto redis = new Redis("localhost", 6379);
    redis.send("RPUSH arkadaşlar Ali");
    redis.send("RPUSH arkadaşlar Mehmet");
    redis.send("LPUSH arkadaşlar Osman");
    writeln ("Tüm arkadaşlar ", redis.send("LRANGE arkadaşlar 0 -1"));
    writeln ("Ortadaki arkadaş ", redis.send("LINDEX arkadaşlar 1"));
    writefln ("En sevdiğim arkadaş olan %s'ı listeden çıkarttık", redis.send("LPOP arkadaşlar"));
    writeln ("Arkadaşların son hali ", redis.send("LRANGE arkadaşlar 0 -1"));
    redis.send("DEL arkadaşlar");
}

Burada arkadaşlar isimli listenin sağına iki tane eleman ekliyoruz. Bir tane de soluna eleman ekliyoruz.

LRANGE arkadaşlar 0 -1 şeklindeki kullanım, liste elemanlarının hepsini veriyor. LINDEX arkadaşlar 1 ise, sıralamanın 0'dan başladığını düşünürsek ikinci liste elemanını veriyor.

LPOP ile listenin en solundaki elemanı çıkarttık.

Burada arkadaşlar listesinde bir sıralama olduğuna dikkatinizi çekmek istiyorum. Bu listeyi en sevdiğimiz arkadaşların listesi gibi düşünebiliriz.

Uygulamayı dub ile derleyip çalıştırdığımızda çıktısını görebiliriz.

Tüm arkadaşlar [Osman, Ali, Mehmet]
Ortadaki arkadaş Ali
En sevdiğim arkadaş olan Osman'ı listeden çıkarttık
Arkadaşların son hali [Ali, Mehmet]

Redis kümeleri

Redis'te küme veri yapısını bir örnek üzerinden anlatmaya çalışalım.

Düşünün ki bir çuvalımız ya da torbamız olsun. İçine renkli toplar koyduğumuzu düşünelim. Bu topların bir sırası yok. Ancak sadece bir kere ekleyebiliyoruz.

import tinyredis;
import std.stdio;

void main()
{
    auto redis = new Redis("localhost", 6379);
    redis.send("SADD çuval kırmızı");
    redis.send("SADD çuval sarı");
    writefln("Çuvala mavi top eklemenin sonucu %s", redis.send("SADD çuval mavi"));
    writefln("Çuvala sarı top eklemenin sonucu %s", redis.send("SADD çuval sarı"));
    writefln("Çuvalda ne var? %s", redis.send("SMEMBERS çuval"));
    writefln("Çuvalda yeşil top var mı %s", redis.send("SISMEMBER çuval yeşil"));
    writefln("Çuvalda kırmızı top var mı %s", redis.send("SISMEMBER çuval kırmızı"));
    writefln("Sarı topu çıkarıyorum %s", redis.send("SREM çuval sarı"));
    writefln("Çuvalda ne kaldı? %s", redis.send("SMEMBERS çuval"));
    redis.send("DEL çuval");
}

Çuvala SADD ile sıra ile kırmızı, sarı top ekledik. Dikkat ederseniz mavi top eklerken writefln ile mavi top eklemenin sonucunu da yazdırabiliyoruz.

Bir tane de zaten var olan sarı top eklemeye çalışırsak, sonuçta 0 göreceğiz.

Çuvalda hangi renk top olduğunu SMEMBERS ile görebiliyoruz.

Çuvalda örneğin yeşil top olup olmadığını SISMEMBER çuval yeşil ile öğrenebiliyoruz.

Çuvaldan bir top çıkartmak için SREM kullanıyoruz.

En sonda kullandığımız DEL komutu ise oluşturduğumuz veri yapısını silmek için kullanılıyor. Eğer kullanmazsak ne olacağını kendiniz bu kısmı kaldırarak deneyebilirsiniz.

Uygulamayı dub ile çalıştırıp çıktısına bakabiliriz.

Çuvala mavi top eklemenin sonucu 1
Çuvala sarı top eklemenin sonucu 0
Çuvalda ne var? [kırmızı, sarı, mavi]
Çuvalda yeşil top var mı 0
Çuvalda kırmızı top var mı 1
Sarı topu çıkarıyorum 1
Çuvalda ne kaldı? [kırmızı, mavi]

Redis eşleme tabloları

Şimdi Redis'in ilginç bir veri yapısına geliyoruz.

Bu veri yapısını bir görsel üzerinde izah etmek faydalı olabilir.

Redis eşleme tablosu

Görebileceğiniz üzere benzersiz anahtarlar var. Bu anahtarlarla ilişkili değerler var.

Bu anahtarların da bir sıralaması yok.

Bu veri yapısını kullanıcı bilgilerini saklamak için kullanabiliriz. Örneğin kullanıcı numarası 1000 olan Ahmet isminde bir kullanıcımız olsun.

import tinyredis;
import std.stdio;

void main()
{
    auto redis = new Redis("localhost", 6379);
    redis.send("HSET kullanıcı:1000 isim 'Ahmet Gezer'");
    redis.send("HSET kullanıcı:1000 eposta 'ahmet@programlama.tk'");
    redis.send("HSET kullanıcı:1000 şifre 'gizli'");
    writefln("Kullanıcı bilgileri %s", redis.send("HGETALL kullanıcı:1000"));
    writefln("Kullanıcı elektronik postasını siliyorum %s", redis.send("HDEL kullanıcı:1000 eposta"));
    writefln("Kullanıcı bilgileri %s", redis.send("HGETALL kullanıcı:1000"));
}

Burada HSET ile eşleme tablosunda yeni bir anahtar değer çifti oluşturuyoruz. HGETALL ile eşleme tablosundaki tüm bilgileri okuyabiliyoruz.

HDEL komutu ile de istediğimiz bir anahtarı silebiliyoruz.

Uygulamayı derleyip çalıştırdığımızda çıktısını görebiliriz.

Kullanıcı bilgileri [isim, Ahmet Gezer, şifre, gizli, eposta, ahmet@programlama.tk]
Kullanıcı elektronik postasını siliyorum 1
Kullanıcı bilgileri [isim, Ahmet Gezer, şifre, gizli]

Redis sıralı kümeler

Eşleme tablolarında olduğu gibi sıralı kümeler de anahtar değer türleri tutarlar.

Anahtarlar benzersizdir. Aynı eşleme tablosunda olduğu gibi bir anahtarla erişilebilir. Eşleme tablosundan farklı olarak da anahtarlar belirli bir değere göre sıralanabilir.

Bu bölümde Redis Öğren'deki örneği aynen aktaralım.

Kullanıcıların hem makale yazabileceği, hem de oy verebileceği bir sayfamız olsun.

Burada makalelerin yanındaki rakamlar kullanıcıların verdiği puanları temsil ediyor.

import tinyredis;
import std.stdio;

void main()
{
    auto redis = new Redis("localhost", 6379);
    redis.send("ZADD makaleler 487 'Kaşar peyniri yapmak için gereken malzemeler nelerdir'");
    redis.send("ZADD makaleler 378 'Antep kebabı nasıl yapılır'");
    redis.send("ZADD makaleler 608 'Bisiklet tamiri nereden öğrenilir'");
    redis.send("ZADD makaleler 528 'Fasa nasıl gidilir'");
    redis.send("ZADD makaleler 133 'Kendi sunucumuzu nasıl kurabiliriz'");
    redis.send("ZADD makaleler 97  'İklim verileri nasıl kaydedilir'");
    redis.send("ZADD makaleler 925 'Otomatik sulama sistemi nasıl kurulur'");
    redis.send("ZADD makaleler 693 'Ekşi mayalı doğal ekmek nasıl pişirilir'");
    writefln("Makalelerin listesi %s",
             redis.send("ZRANGE makaleler 0 -1"));
    writefln("En yüksek puan alan 3 makale %s",
             redis.send("ZRANGE makaleler 0 2"));
    writefln("Bir tane makale siliyorum %s ",
            redis.send("ZREM makaleler 'Kendi sunucumuzu nasıl kurabiliriz'"));
    redis.send("DEL makaleler");
}

ZADD ile yeni makale ekleyebiliyoruz. Ancak bu makale aldığı puana göre sıralanıyor.

ZRANGE ile tüm makalelerin listesini görebiliyoruz. Gene istersek en yüksek puan alan 3 makaleyi gösterebiliyoruz.

Makaleyi silmek için de ZREM komutunu kullanıyoruz.

Uygulamayı derleyip çıktısına bakalım.

Makalelerin listesi [İklim verileri nasıl kaydedilir, Kendi sunucumuzu nasıl kurabiliriz, Antep kebabı nasıl yapılır, Kaşar peyniri yapmak için gereken malzemeler nelerdir, Fasa nasıl gidilir, Bisiklet tamiri nereden öğrenilir, Ekşi mayalı doğal ekmek nasıl pişirilir, Otomatik sulama sistemi nasıl kurulur]

Görülebileceği üzere makaleler kullanıcılardan aldıkları puanlara göre sıralandı.

En yüksek puan alan 3 makale [İklim verileri nasıl kaydedilir, Kendi sunucumuzu nasıl kurabiliriz, Antep kebabı nasıl yapılır]
Bir tane makale siliyorum 1

Eğer istersek en yüksek puan alan 3 makaleyi de gösterebiliyoruz.

Yorumlar

yorum yaz

Yorum yaz

Henüz yorum yok.