Giriş yapmadınız.

#1 30.01.2019 10:45:26

Kevin-Mitnick
Üye
Kayıtlı: 26.05.2016
Mesajlar: 467

Laravel Cache

Selamlar deneme amaçlı cache yapısını kullanmaya karar verdim ama kafamda bazı sorular var.

$value = Cache::remember('isilani', 20, function () {
    
 Isilani::with('kaynakDil','hedefDil','ceviriTuru','teklif')
            ->where('active',1)
            ->where('durum',4)
            ->orderBy('created_at','DESC')
            ->paginate(10);


});

Burda 20 dakikalığına datalarımı cache atıyorum. Ve sonra bu tablonun update, delete , insert methodlarında

Cache:forget('isilani')

diyorum böylece değişiklik olursa tekrar cache atıyor.


1-Bu doğru bir mantık mı ve burda sayfaları ve datayı cacheliyor paginate kullandığım için ?
2- Paginate kullandığım için herhangi değişik birşey yapmama gerek var mı ?
3-Son olarak durum sutunu bazı durumlarda değişiyor o durumlara da mı forget cache yapmam gerekiyor ?
4- Redis kullanırsam bundan farkı ne olucaktır?


Mister Koder

Çevrimdışı

#2 30.01.2019 11:04:24

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,589
Website

Yanıt: Laravel Cache

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.

Çevrimdışı

#3 30.01.2019 13:00:40

Kevin-Mitnick
Üye
Kayıtlı: 26.05.2016
Mesajlar: 467

Yanıt: Laravel Cache

@mgsmus hocam teşekkür ederim orda return varda çıkmamış .
Redis kodunuz için teşekkür ediyorum . Redis'in arayüzünü görmek için birşey kullanıyor musunuz ? İzlediğim videolarda konsollarda hallediyorlar işlerini cpanel , plesk panel gibi bir ön yüzü kullanabilir miyiz ?


Mister Koder

Çevrimdışı

#4 30.01.2019 13:25:28

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,589
Website

Yanıt: Laravel Cache

Ben Redis'te hiç arayüze ihtiyaç duymadım. Genellikle de Laravel ile kullandığım için direkt etkileşim için de sebebim olmadı. Redis için neden bir arayüz istiyorsunuz?

Çevrimdışı

#5 30.01.2019 13:34:13

Kevin-Mitnick
Üye
Kayıtlı: 26.05.2016
Mesajlar: 467

Yanıt: Laravel Cache

@mgsmus hocam ben herhalde yanlış biliyorum redis mysql gibi verileri tuttuğumuz bir yapı olduğu için o verileri görmek için söylemiştim .


Mister Koder

Çevrimdışı

#6 30.01.2019 14:44:49

caner_dmn
Üye
Kayıtlı: 23.05.2018
Mesajlar: 60

Yanıt: Laravel Cache

@Kevin-Mitnick Redisinizi arayüz olarak görmek için https://github.com/erikdubbelboer/phpRedisAdmin repoyu kullanabilirsiniz. Local olarak kullanmıştım sunucuda hiç kullanmadım.

Son düzenleyen caner_dmn (30.01.2019 14:45:11)

Çevrimdışı

#7 30.01.2019 14:46:11

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,589
Website

Yanıt: Laravel Cache

Redis sadece anahtar => değer şeklinde veri tutar. Siz örneğin Laravel'de oturum (session) için Redis kullanırsanız, session(['key' => 'value']) şeklinde oturum değişkeni oluşturduğunuzda bunu Redis'te tutmuş oluyorsunuz.

Çevrimdışı

#8 30.01.2019 15:53:41

Kevin-Mitnick
Üye
Kayıtlı: 26.05.2016
Mesajlar: 467

Yanıt: Laravel Cache

teşekkürler.


Mister Koder

Çevrimdışı

#9 30.01.2019 23:12:38

sineld
Yönetici
Yer: Bursa
Kayıtlı: 26.12.2012
Mesajlar: 1,466
Website

Yanıt: Laravel Cache

Küçük bir bilgi:

->orderBy('created_at', 'DESC')

yerine

->orderByDesc('created_at')

kullanabilirsiniz.

Çevrimdışı

Forum alt kısmı