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.
Eklentiyi kurmak için terminalinize şu komutu girin:
$ artiframe add redis
Komut tamamlandıktan sonra Redis bağlantı ayarlarınız .env dosyasına eklenecektir:
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DATABASE=0
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.
<?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
}
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.
<?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);
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.
<?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);
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.
<?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');
| Metot | Parametreler | Açı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! |