Yapılandırma
laravel çeşitli önbellek (cache) sistemleri için birleşik bir API sunar. Önbellek yapılandırması config/cache.php
dosyasındadır. Bu dosyada uygulamanız botunca varsayılan olarak kullanmak istediğiniz önbellek sürücüsünü tanımlayabilirsiniz. Laravel popüler önbellekleme sistemlerinde Memcache
ve Redis
destekler.
Önbellek yapılandırma dosyası dosyanın içinde açıklanan başka ayarlar da içerir. Laravel varsayılan olarak dosya sisteminde önbelleklenmiş olarak saklanan file
önbellek sürücüsünü kullanmak için yapılandırılmıştır. Büyük uygulamarlar için Memcached, APC gibi sistem belleğinde saklananlar önerilir.
Önbellek Gereksinimleri
Database
database
önbellek sürücüsü kullanıldığında, bir tablo oluşturmaya ihtiyacınız vardır. Tablo tanımlası için aşağıda bir önel bulacaksınız.
1 2 3 4 5 |
Schema::create('cache', function($table) { $table->string('key')->unique(); $table->text('value'); $table->integer('expiration'); }); |
Memcached
Memcached kullanmak için Memcached PECL paketinin yüklü olması gerekir.
Varsayılan olarak TCP/IP tabanlı yapılandırma kullanılır.
1 2 3 4 5 6 7 |
'memcached' => [ [ 'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100 ], ], |
host
seçeneğini bir UNIX soket yolu olarak da ayarlayabilirsiniz. Bunu yaparsanız, post değeri 0
olamlıdır:
1 2 3 4 5 6 7 |
'memcached' => [ [ 'host' => '/var/run/memcached/memcached.sock', 'port' => 0, 'weight' => 100 ], ], |
Redis
Redis önbelleği laravel ile kulannamadan önce Composer ile predis/predis
paketini (~1.0) yüklemeniz gerekir.
Önbellek Kullanma
Bir Önbellek Örneği Oluşturma
Illuminate\Contracts\Cache\Factory
ve Illuminate\Contracts\Cache\Repository
anlaşmaları Laravel’in önbellek servislerine erişimi sağlar. Factory
anlaşması uygulamanız için tanımlanan tüm cache sürücülerine erişimi sağlar. Repository
anlaşması ise cache
yapılandırma dosyanızda belirtilen varsayılan önbellek sürücüsünün bir uygulanlasıdır.
Örnek için, bir kontrlcüye Cache
dahil edelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
namespace App\Http\Controllers; use Cache; use Illuminate\Routing\Controller; class UserController extends Controller { /** * Show a list of all users of the application. * * @return Response */ public function index() { $value = Cache::get('key'); // } } |
Çoklu Önbellek Saklama
Cache
facade kullanarak, store
metodu yoluyla çeşitli önbellek saklamalarına erişebilirsiniz. store
metoduna geçirilen anahtar, cache
yayapılandırma dosyanızdaki stores
dizisinde listelenen saklamalardan birine karşılık gelir.
1 2 3 |
$value = Cache::store('file')->get('foo'); Cache::store('redis')->put('bar', 'baz', 10); |
Öğelerin Önbellekten Getirilmesi
Önbellekten öğeleri getirmek için Cache
facade üzerindeki get
metodu kullanılır. Öğe önbellekte yoksa null
döndürücektir. Dilerseniz get
metoduna ikinci bir argünam belirterek öğe bulunamadığında döndürülmesini istediğiniz varsayılan değeri belirtebilirsiniz:
1 2 3 |
$value = Cache::get('key'); $value = Cache::get('key', 'default') |
Varsayılan değer olarak isimsiz fonksiyon da geçirebilirsiniz. Belirtilen öğe önbellekte bulunamazsa isimsiz fonksiyon döndürülecektir.
1 2 3 |
$value = Cache::get('key', function() { return DB::table(...)->get(); }); |
Öğenin Varlığının Kontrol Edilmesi
has
metodu bir öğenin önbellekte olup olmadığını belirlemek için kullanılılır.
1 2 3 |
if (Cache::has('key')) { // } |
Değerleri Arttırma / Azaltma
increment
, decrement
metodları önbellekteki tamsayı değerlerinin değerlerini ayarlamak için kullanılır. Her iki metod da isteğe bağlı, arttırma ve azaltma değerini belirten ikinci argüman kabul eder:
1 2 3 4 5 6 7 |
Cache::increment('key'); Cache::increment('key', $amount); Cache::decrement('key'); Cache::decrement('key', $amount); |
Alma veya Güncelleme
Bazen bir öğeyi bellekten getirmek istersiniz, fakat istenen öğe mevcut değilse bir varsayılan bir değer de saklamak istersiniz. Örneğin, önbellekten tüm kullanıcıları getirmek istediniz, mevcut değilse veritabanından alıp önbelleğe eklemek istediniz. Cache::remember
metodunu kullanarak bunu yapabilirsiniz:
1 2 3 |
$value = Cache::remember('users', $minutes, function() { return DB::table('users')->get(); }); |
Öğe önbellekte mevcut değilse, remember
metoduna isimsiz bir fonksiyon geçirilerek icra edilir ve sonucu önbelleğe konur:
Ayrıca remember
ve forever
metodlarını birleştirebilirsiniz.
1 2 3 |
$value = Cache::rememberForever('users', function() { return DB::table('users')->get(); }) |
Alma veya Silme
Bir öğeyi önbellekten alıp daha sonra da silmek isterseniz pull
metodunu kullanabilirsini<. get
metodu gibi, öğe önbellekte yoksa null
döndürülür.
1 |
$value = Cache::pull('key'); |
Öğeleri Önbellekte Saklama
Öğeleri önbellekte saklamak için Cache
facade put
metodunu kullanabilirsiniz. Cache bir öğe koyduğunuzda, değerin ne kadar dakika saklanacağını belirmelisiniz:
1 |
Cache::put('key', 'value', $minutes); |
Öğenin ne kadar süre saklanacağını dakika sayısını geçirmek yerine, önbellekleniş öğenin bitişini gösteren PHP Datetime
örneği geçirebilirsiniz.
1 2 3 |
$expiresAt = Carbon::now()->addMinutes(10); Cache::put('key', 'value', $expiresAt); |
add
metodu yalnızca öğe önbellekte saklanmıyorsa önbelleğe ekler. Öğe önbelleğe eklendiğinde metod true
döner. Diğer türlü metod false
döner:
1 |
Cache::add('key', 'value', $minutes); |
forever
metodu öğeyi önbelleğe kalıcı olarak saklamak için kullanılır. Bu değeri forget
metodu kullanılarak elle kaldırmanız gerekir.
1 |
Cache::forever('key', 'value'); |
Öğeleri Önbellekten Kaldırma
Öğeleri önbellekten Cache
facade forget
metodunu kullanarak kaldırabilirsiniz.
1 |
Cache::forget('key'); |
Özel Önbellek Sürücüsü Ekleme
Laravel önbelleğini özel bir sürücü ile gelişletmek için Cache
facade extend
metodunu kullanacağız. Bu servis sağlayıcıyla yapılabilir.
Örneğin, “mongo” isimli yeni bir önbellek sürücüsü kaydetmek için:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
namespace App\Providers; use Cache; use App\Extensions\MongoStore; use Illuminate\Support\ServiceProvider; class CacheServiceProvider extends ServiceProvider { /** * Perform post-registration booting of services. * * @return void */ public function boot() { Cache::extend('mongo', function($app) { return Cache::repository(new MongoStore); }); } /** * Register bindings in the container. * * @return void */ public function register() { // } } |