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.