Predis (Redis Önbellekleme)

artiframe add redis eklentisi, projenizi yüksek performanslı bellek içi (in-memory) veritabanı olan Redis ile buluşturur. Arka planda predis/predis paketini çalıştıran bu servis, JSON dönüşümlerini otomatik yaparak sizi ekstra json_encode/json_decode derdinden kurtarır. Veritabanı yükünü hafifletmek için src/Service/RedisCache.php sınıfını kullanabilirsiniz.

1. Kurulum ve Yapılandırma

Eklentiyi kurmak için terminalinize şu komutu girin:

terminal
$ artiframe add redis

Komut tamamlandıktan sonra Redis bağlantı ayarlarınız .env dosyasına eklenecektir:

.env
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DATABASE=0
2. Temel Veri Okuma / Yazma İşlemleri

ArtiFrame Redis servisi, dizileri (array) ve nesneleri (object) yazarken otomatik olarak JSON formatına çevirir; okurken ise tekrar diziye (array) ayrıştırarak size sunar.

example.php
<?php
use Src\Service\RedisCache;

$redis = new RedisCache();

// Düz metin yazma
$redis->set('site_basligi', 'ArtiFrame Framework');

// Dizi yazma (60 saniye ömrü olan bir önbellek [TTL])
$kullanicilar = ['Ali', 'Ayşe', 'Fatma'];
$redis->set('aktif_uyeler', $kullanicilar, 60);

// Veri okuma (Eğer yoksa ikinci parametre olan "Varsayılan" değeri döner)
$uyeler = $redis->get('aktif_uyeler', []); 
// Çıktı: Array ( [0] => Ali [1] => Ayşe [2] => Fatma )

// Key kontrol etme ve Silme
if ($redis->has('site_basligi')) {
    $redis->forget('site_basligi'); // Anahtarı (Key) kalıcı olarak siler
}
3. Akıllı Önbellekleme (Remember Metodu)

Veritabanı sorgularını önbelleklemek için en ideal (cache-aside) kalıbıdır. Önce Redis'e bakar, veri varsa doğrudan döner. Yoksa verdiğiniz fonksiyonu (callback) çalıştırıp sonucu veritabanından çeker, Redis'e yazar ve sonra döner.

ProductController.php
<?php
// Anasayfadaki ürünleri 300 saniye (5 dakika) boyunca Redis'ten getir
$products = $redis->remember('homepage_products', 300, function() use ($db) {
    // Sadece Redis'te veri YOLSA bu süslü parantez içine girilir ve DB yorulur.
    return $db->query("SELECT * FROM products ORDER BY id DESC LIMIT 10")->fetchAll();
});

echo json_encode($products);
4. Sayaçlar (Increment / Decrement)

Redis bellek içi çalıştığı için sayfa görüntülenmeleri, sepet sayıları veya like butonları gibi anlık hızlı matematik işlemleri için muazzamdır. Diski (MySQL'i) yormaz.

example.php
<?php
// Görüntülenme sayısını 1 artır (Eğer key yoksa 0 kabul eder ve 1 yapar)
$yeniGörüntülenme = $redis->increment('article_105_views');

// Sepetteki ürün sayısını 2 azalt
$redis->decrement('cart_user_55', 2);
5. Redis Hash İşlemleri (İleri Seviye)

Büyük bir JSON dosyasının tamamını okumak/yazmak yerine, onun içindeki sadece bir alanı (field) hızlıca güncelleyebildiğiniz yapıdır (HSET/HGET). Özellikle oturum (session) veya konfigürasyon tutmak için harikadır.

example.php
<?php
// 'user_55_settings' adında bir hash yapısının içindeki 'theme' anahtarını değiştir
$redis->hSet('user_55_settings', 'theme', 'dark');
$redis->hSet('user_55_settings', 'language', 'tr');

// Sadece 'theme' ayarını oku (Eğer yoksa 'light' dön)
$tema = $redis->hGet('user_55_settings', 'theme', 'light');

// Tüm ayarları tek seferde bir array olarak çek (json_decode otomatik yapılır)
$tumAyarlar = $redis->hGetAll('user_55_settings');

// Sadece dil ayarını sil
$redis->hDel('user_55_settings', 'language');
6. Diğer Araçlar ve Metotlar
MetotParametrelerAçıklama
ttl() string key Bir anahtarın silinmesine kaç saniye (Time to Live) kaldığını gösterir.
expire() string key, int seconds Mevcut, süresiz bir anahtara veya süresi dolmak üzere olan bir anahtara yeni bir geri sayım atar.
keys() string pattern Belirtilen desendeki anahtarları listeler. Örn: $redis->keys('user_*'). (Production'da aşırı büyük datalarda kullanılması önerilmez)
flush() - Seçili olan Redis veritabanındaki (Örn: DB 0) TÜM anahtarları siler. Kritik işlemdir!