Laravel Caching

Makale İçerik Listesi

Çalışırken Cache Clear

  1. View cache clear php artisan view:clear
  2. Komple cache clear php artisan cache:clear

Caching Kurulumu

  1. Laravel projesinde Caching kurmak için öncelikle caching yapacağımız tabloyu oluşturmamız lazım. Bunun için php artisan cache:table komutunu çalıştırıyorum.
  2. Sonra .Env dosyasında CACHE_DRIVER seçeneğine database yazıyorum.
  3. Cache dosyasının adının prefixini değiştirmek istersem bunu config/cache.php dosyasından yapabilirim. En alt 102. satırda 
    'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'),

    dedim ve yine env dosyamda APP_NAME'i "Hedef40" olarak yazdım. böylece Str::slug fonksiyonunundan sonra cache dosyalarının prefixi hedef40_cache_CACHE_ADI şeklinde olacaktır.

Remember ile Çalışmak

X bir sorguyu belli bir süreliğine Cache'de tutmak istersen öncelikle Cache::remember kullanabilirim 

$goals = Cache::remember('abandonedGoals', $seconds = 3600, function () {
    return Goal::select('id', 'title', 'created_at')
        ->whereDay('created_at', '<', now()->subDays(4))
        ->with(['subscriptions:id,goal_id', 'subscriptions.trials'])
        ->get()
        ->filter(function ($goal, $key) {
            if($goal->subscriptions->count() == 1){
                return $goal->subscriptions->first()->trials->count() == 0;
            }
        });
});

Her Zaman Tutmak

  1. Bazı şeyler neredeyse hiç değişmez ve her zaman varsa cache'ten gelmesini isteyebiliriz. Bu gibi durumlarda (e-Ticaret sitesinde şehir isimleri gibi) Cache::remember demek yerine Cache::forever komutunu çalıştırabiliriz. link

Cache Silme işlemi

  1. Cache olarak tuttuğum herşeyi veya belli şeyleri silmek için bir fonksiyon çalıştırabilirim.
  2. Buna göre silinecek cache dosyalarını bir array içerisinde belirtir ve bunların içinden tek tek geçerek Cache::forget kodu ile Cache dosyasını sildirtebilirim. 
    $cachedElements = [
        'abandonedGoals',
        'abandonedSubs',
    ];
    
    foreach($cachedElements as $element){
        Cache::forget($element);
    }

Referanslar

  1. Laravel Cache Docs - link
  2. Header'da cache-policy getirme - link