Redis ve Laravel

Redis Nedir?

Redis (Remote Dictionary Server), Key-Value (Anahtar-Değer) mantığına dayalı hızlı veri erişimi sağlayan bir NoSQL veritabanıdır. Özellikle yüksek hız/performans gerektiren uygulamalarda, önbellekleme (caching) ve anlık veri taleplerinde sıklıkla tercih edilir. Bellek üzerinde çalışan bir veritabanı olması ve önbellekleme yapabildiği için verileri sürekli veritabanından çekmek zorunda kalmaması Redis’in yüksek hız ve düşük gecikme süreleri sunmasını sağlar. Hadi biraz Redis’in yeteneklerinden bahsedelim 🙂

Redis’in Temel Özellikleri:

1. Hızlı Veri Erişimi:

Redis, verileri RAM üzerinde depolayarak hızlı bir erişim sağlar. Bu özellikle yüksek performans gerektiren uygulamalarda tercih edilmesini sağlar.

2. Esnek Veri Yapıları:

Redis, sadece basit anahtar-değer çiftleri değil, aynı zamanda karmaşık veri yapılarını da destekler. Listeler, kümeler, kümeli kümeler gibi çeşitli veri tipleri üzerinde işlem yapabilir.

3. Yüksek Erişilebilirlik:

Redis, master-slave replikasyonu, clusterlar ve sentinel gibi özelliklerle yüksek erişilebilirlik sağlar. Bu, sistemde oluşabilecek arızalara karşı dirençli olmasını sağlar.
Not: Redis’i projenizde kullanırken Cluster ve Master-slave teknolojisini araştırıp hangisini kullanacağınızı projenizin gereksinimlerine göre karar vermeniz gerekebilir.

4. Pub/Sub (Yayın/Abone) Modeli:

Redis, yayın/abone modeli ile olay tabanlı programlamaya olanak tanır. Bu özellik, gerçek zamanlı uygulamalarda ve bildirim sistemlerinde kullanılır.

Redis’in Alternatifleri Nelerdir?

Redis gibi Key-Value odaklı bir çok seçenek vardır. Bu seçenekler de bize yüksek hız, performans ve hafıza odaklı hizmet sunar. Tabii bütün bu veritabanlarının birbirine göre avantajları ve dezavantajları vardır fakat buna değinmeyeceğim. Dilerseniz siz araştırıp projenize en uygun olanı seçebilirsiniz.

İşte Redis gibi Key-Value odaklı bir kaç veritabanı:

  • Memcached
  • MongoDB
  • Apache Kafka
  • Cassandra

Biz bu yazının konusu olan Redis ve Laravel’e geri dönelim.

Laravel ve Redis Entegrasyonu

Laravel, popüler bir PHP web uygulama frameworküdür ve Redis’i destekler. Laravel’de Redis kullanmak, özellikle önbellekleme, sıralı işler ve gerçek zamanlı uygulama ihtiyaçları için etkili bir çözümdür. Laravel, Redis ile entegre olarak çalışabilmek için predis veya phpredis gibi sürücüler kullanır.

Redis Kurulumu:

Redis’i kullanmaya başlamadan önce Redis’i bilgisayarınıza kurmanız gerekmektedir. Tüm özelliklerini aktif bir şekilde kullanabilmek için ubuntu tabanlı sistemlerde kurmanız daha sağlıklı olacaktır (Linux, MacOS vs).
kuruluma dönecek olursak Redis’i şu komut ile kurabilirsiniz:

sudo apt-get install redis-server

Laravel’de Redis Yapılandırması:

Laravel, config klasörünün içinde database.php adlı dosyada Redis’e bağlanmak için gerekli olan ayarları içerir. Redis’e bağlanabilmek için config/database.php dosyanızın içindeki şu ayarları kendi bağlantı ayarlarınızla değiştirmeniz gerekir.

'redis' => [
     'client' => env('REDIS_CLIENT', 'predis'),
     'default' => [
         'host' => env('REDIS_HOST', '127.0.0.1'),
         'password' => env('REDIS_PASSWORD', null),
         'port' => env('REDIS_PORT', 6379),
         'database' => env('REDIS_DB', 0),
     ],
 ],

Burada gerekli ayarlar projemizin root klasöründe bulunan .env dosyasından çekildi. Eğer env(key, defaultValue) fonsiyonu ilgili keyi projeKlasoru/.env dosyasında bulamazsa virgülden sonra gelen değeri esas alır. Yani .env dosyasında ‘REDIS_CLIENT’ adında bir key yoksa varsayılan olarak örnekteki ‘predis’ değerini alır.

Redis – Set ve Get Fonksiyonları

Redis’e bir veriyi kaydetmek ya da var olan bir veriyi getirmek için set() ve get() fonksiyonları kullanılır. Fonksiyonları nasıl kullanacağımızı örnek üzerinde göstermem gerekirse:

//Bir veriyi Redis'e eklemek için set() fonksiyonunu kullanırız
$blogs = \DB::table("blogs")->get();
Redis::set('blogs', serialize($blogs));
//Bir veriyi Redis'ten çekmek için get() fonksiyonunu kullanırız
$blogs = unserialize(Redis::get("blogs"));

Redis Önbellekleme (Caching):

Laravel’de Redis’i önbellekleme amacıyla kullanabiliriz. Böylece bir veriyi her defasında veritabanından çekmek yerine belirttiğimiz süre boyunca önbellekten çekebiliriz. Aşağıdaki kod sayesinde Cache ve Redis facadeleri ile bu işlemi gerçekleştirebiliriz. Bu kod aratacağımız key eğer varsa veriyi Redis’ten çeker, eğer yoksa önce veritabanından çeker sonra bu veriyi Redis’e kaydeder ve belirttiğimiz süre boyunca burada saklar.

<?php 
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Redis;
use Illuminate\Support\Facades\DB;

$data = Cache::remember('blogs', $minutes, function () {
  // Redis üzerinde blogs'a karşılık gelen veriyi kontrol et
  $cache = Redis::get('blog');

  if (!is_null($cache)) {
    // Eğer önbellekte varsa Redis verisini kullan 
    return unserialize($cachedData); 
  } else{
    // Eğer önbellekte yoksa DB'deki veriyi çek, Redis'e yaz ve belirtilen süre boyunca sakla 
    $dbData = DB::table('blogs')->get();
    Redis::setex('blogs', $minutes * 60, serialize($dbData));
    return $dbData;
  } 
});

Bu yazımda Redis’in Laravel ile birlikte kullanımına göz attık. Redis’i Laravel’de nasıl kullanacağımızı, ne için kullanabileceğimizi ve dikkat etmemiz gereken noktaları ele aldık. Umarım faydalı bir yazı olmuştur.

Bir sonraki yazımda görüşmek üzere 🙂