Redis'in performansı çok iyi. Sadece cache değil aynı zamanda kuyruk ve oturum için de Redis kullanıyorum. Tavsiye ederim, gözle görülür bir hız artışı sağlıyor. Ayrıca tag desteği var, kullanımını göstermek için kodunuzu düzenleyip aşağıda etiketli bir şekilde paylaşacağım.
Üstteki kod yanlış. Closure içerisinde herhangi bir bir şey return yapmadığınız için $value değer almıyor.
Mantık da yanlış çünkü her sayfa ayrı bir anahtar ile önbelleğe alınmalı. Aksi taktirde 2. sayfaya geçtiğinizde yine 1. sayfanın sonuçlarını alırsınız çünkü her sayfa farklı sonuca sahip.
O yüzden şöyle olabilir:
$page = $request->get('page',1);
$isilanlari = Cache::tags(['isilani','paginated-isilani',"isilani-{$page}"])->rememberForever("isilanlari-{$page}", function () {
return Isilani::with('kaynakDil', 'hedefDil', 'ceviriTuru', 'teklif')
->where('active', 1)
->where('durum', 4)
->orderBy('created_at', 'DESC')
->paginate(10);
});
Gördüğünüz gibi
remember yerine
rememberForever kullandım, önbellek süresi yok. Onun yerine kayıt değişikliğe uğradığında önbelleği temizleyeceğiz:
app/Isilani.php
public static function boot()
{
parent::boot();
static::created(function($model) {
Cache::tags('isilanlari')->flush();
});
static::updated(function($model) {
Cache::tags('isilanlari')->flush();
});
static::deleted(function($model) {
Cache::tags('isilanlari')->flush();
});
}
Etiketler (tags) sayesinde sadece ilgili önbelleği temizliyorum. İsteseydim
Cache::tags('paginated-isilani')->flush(); şeklinde sadece sayfalama yapılmış ilanları da temizleyebilirdim.