Laravel‘de cache kullanımı uygulamalarınızda performans artışı sağlamak için kullanılabilecek güzel bir yöntemdir. Cache kullanımı hem sunucunuzdaki hem de veritabanınızdaki yükü büyük ölçüde azaltacak ve işlemlerin hızlanmasını sağlayacaktır.

Bu yazımda laravel’de cache kullanımından ve kullanım için yapılacak ayarlardan bahsedeceğim.

İçindekiler Tablosu

Yapılandırma

Laravel cache kulanımı için farklı seçeneklere sahiptir. Bu seçenekler arasından en uygun olanını uygulamanızın büyüklüğüne ve sistem kaynaklarınıza göre seçebilirsiniz. Bu seçenekleri uygulamanızın config/cache.php dosyasında aşağıdaki gibi bir yorum bölümünde görebilirsiniz.

// config/cache.php

/*
    |--------------------------------------------------------------------------
    | Cache Stores
    |--------------------------------------------------------------------------
    |
    | Here you may define all of the cache "stores" for your application as
    | well as their drivers. You may even define multiple stores for the
    | same cache driver to group types of items stored in your caches.
    |
    | Supported drivers: "apc", "array", "database", "file",
    |            "memcached", "redis", "dynamodb", "null"
    |
 */

Dökümanda da belirtildiği üzere laravel toplam 7 farklı cache driver seçeneğini desteklemekte.

Laravel Cache Driver Seçimi

Laravel, cache kullanımı için size seçenekler sunuyor ama hangisini hangi durumda kullanmanız gerektiği konusunda emin değilseniz basit bir seçim ölçütü olarak şu şekilde örneklendirebilirim. Eğer yaptığınız uygulama basit bir CMS(Content Management System) ise driver olarak array, database ya da file kullanmayı tercih edebilirsiniz. Ancak daha karmaşık bir uygulama yazıyorsanız, tabloların bir biri ile olan ilişkileri çok fazlaysa alternatif cache driver olarak memcached ve redis kullanımını tercih edebilirsiz. Burada memcached ve redis kullanımı için dikkat etmeniz gereken ikisi için de kurulum yapmanız gerekiyor ve sunucu kaynaklarınızın bu driver’lar için yeterli olması gerektiğidir.

Yeni bir laravel projesi kullanmaya başladığınızda varsayılan cache driver .env dosyasında file olarak belirtilmiştir. Tercih ettiğiniz driver değerini buraya yazarak laravel’in cache driver’ını değiştirebilirsiniz.

//.env

CACHE_DRIVER=file

Laravel Cache Driver: File

Cache driver olarak file driver kullanmak istiyorsanız her hangi bir kurulum yapmanıza gerek yoktur. Laravel’de varsayılan olarak gelen file seçeneceğini kullanmaya devam edebilirsiniz. Eğer config/cache.php içindeki varsayılan ayarları değiştirmediyseniz cache bilgileriniz aşağıda da görebileceğiniz gibi framework/cache/data dosyasında saklanmaktadır.

// config/cache.php

'file' => [
    'driver' => 'file',
    'path' => storage_path('framework/cache/data'),
],

Laravel Cache Driver: Database

Cache driver olarak database‘ı tercih ederseniz php artisan cache:table command’ını kullanarak bir migration oluşturmanız gerekecek ve bu migration aşağıdaki gibi bir migration oluşturacaktır. Bu oluşan migration’ını veri tabanınızda uygulamak için php artisan migrate komutunu çalıştırmayı unutmayın.

Schema::create('cache', function ($table) {
    $table->string('key')->unique();
    $table->text('value');
    $table->integer('expiration');
});

Eğer config/cache.php içindeki varsayılan ayarları değiştirmediyseniz cache bilgileriniz aşağıda da görebileceğiniz gibi cache tablosunda saklanmaktadır. Eğer tablo adını değiştirmek isteseniz aşağıdaki table kısmında cache yerine yeni bir tablo adı belirtebilirsiniz. Tablo adını değiştirdiğinizde migration içindeki tablo adınızıda değiştirmeyi unutmayın.

// config/cache.php

'database' => [
    'driver' => 'database',
    'table' => 'cache',
    'connection' => null,
],

Laravel Cache Driver: Memcached

Cache driver olarak memcached driver kullanmak istiyorsanız öncelikle Memcached PECL paketini kurmanız gerekiyor. Yüklemeyi yaptıktan sonra config/cache.php dosyasından memcached ayarlarını güncelleyebilirsiniz.

// config/cache.php

'memcached' => [
    'driver' => 'memcached',
    'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
    'sasl' => [
        env('MEMCACHED_USERNAME'),
        env('MEMCACHED_PASSWORD'),
    ],
    'options' => [
        // Memcached::OPT_CONNECT_TIMEOUT => 2000,
    ],
    'servers' => [
        [
            'host' => env('MEMCACHED_HOST', '127.0.0.1'),
            'port' => env('MEMCACHED_PORT', 11211),
            'weight' => 100,
        ],
    ],
],

Laravel Cache Driver: Redis

Cache driver olarak redis driver kullanmak istiyorsanız öncelikle kurulum yapmanız gerekiyor. Bu kurulum için iki seçeneğiniz mevcut.

1- PhpRedis: Kurulum’u ikinci seçeneğe göre daha zordur ancak ikinci seçeneğe göre daha yüksek performans elde etmenizi sağlar.

2- Predis/predis Paketi Kurulumu: composer require predis/predis komutunu çalıştırarak composer ile kurulumu yapabilirsiniz.

Temel redis‘in temel bağlantı bilgilerini .env dosyasından değiştirebilirsiniz.

// .env

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

Ayrıntılı redis ayarlarını görmek isteseniz config/database.php için de bulabilirsiniz.

// config/database.php

'redis' => [

    'client' => env('REDIS_CLIENT', 'phpredis'),

    'options' => [
        'cluster' => env('REDIS_CLUSTER', 'redis'),
        'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
    ],

    'default' => [
        'url' => env('REDIS_URL'),
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', '6379'),
        'database' => env('REDIS_DB', '0'),
    ],

    'cache' => [
        'url' => env('REDIS_URL'),
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', '6379'),
        'database' => env('REDIS_CACHE_DB', '1'),
    ],

],

Redis konusunda daha detaylı bilgi için Laravel’in kendi dökümanını inceleyebilirsiniz.

Laravel Cache Kullanımı

Cache’e veri yazma

Cache oluştururken süreli ya da süresiz olarak kayıtlarınızı oluşturabilirsiniz. Eğer süreli cache oluşturursanız belirtilen süre sonunda cache’ler kendi kendine temizlenecektir.

Cache::put('key', 'value', $seconds);

Cache varsa getir yoksa oluştur ve getir

Laravel cache kullanımı için en uygun yöntemin aşağıdaki örnek olduğunu söyleyebilirim. Aşağıdaki örnek öncelikle verileriniz daha önceden cache’lenmiş mi diye bakar. Eğer belirttiğiniz key ile cache oluşturulmuşsa size o veriyi getirecektir. Belirtilen key için cache mevcut değilse sql’i çalıştıracak ve sonucu sizin için cache’leyecektir. Burada oluşturulan cache belirtilen süre sonunda otomatik olarak temizlenir.

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Cache;

class UserController extends Controller
{
    public function index()
    {
        $value = Cache::remember('kullanicilar', 600, function () {
            return DB::table('users')->get();
        });

        //
    }
}

Yukarıdaki örnekte users tablosundan çekilen kayıtlar ‘kullanıcılar’ anahtar kelimesi ile 600 saniye süreyle cache’e kaydediliyor.

Süre belirtmeden sonsuza kadar cache kaydetme

Cache’lerinizi sistem çalıştığı sürece saklanmasını isterseniz aşağıdaki örneği kullanabilirisiniz.

$value = Cache::rememberForever('users', function () {
    return DB::table('users')->get();
});

Cache’den veri çekme

Cache’e kaydettiğiniz verileri çekmek için get methodunu kullanabilirsiniz. İhtiyacınız olan durumlarda ise cache değeri için default bir değer tanımlamasıda yapabilsiniz.

$value = Cache::get('key');

$value = Cache::get('key', 'default');

Kayıtlı cache verilerini getir ve cache’i temizle

Bazı durumlarda cache’ı çektikten sonra silmek isteyebilirsiniz. Bu durumda pull methodunu kullanabilirsiniz.

$value = Cache::pull('key');

Bu yazımda laravel’de cache kullanmaya başlamak için yapılacak genel ayarlardan ve temel seviyede cache kullanımından bahsettim. İleri seviyedeki cache ihtiyaçlarınız ve laravel’in cache için sunduğu diğer imkanlar için Laravel’in kendi sitesini buradan ziyaret edebilirsiniz.

Laravel’in ne olduğu hakkında bir bilginiz yoksa buradan laravel hakkında yazdığım kısa açıklamayı inceleyebilirsiniz. Ya da laravel hakkındaki diğer yazılarıma göz atmak isterseniz buradan inceleyebilirsiniz.

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz