Laravel'de Cache kullanımı

Merhabalar,


Bu yazıda Laravel'de Cache kullanımından bahsedeceğim. Projenizde cache kullanmanız, uygulamanızın hem daha performanslı çalışmasını hem de sunucuya ve veritabanına bindirilen yükü azaltmanızı sağlayacaktır.


Cache kullanımını örnekleyecek olursak;


İlk olarak yeni bir Laravel projesi oluşturuyoruz. Sonrasında Xampp yardımıyla yerelde bir veritabanı oluşturuyoruz. Projemizin .env dosyasında veritabanı bilgileri için gerekli düzenlemeleri yapıyoruz. Veritabanı tablomuzu oluşturmak adına bir migration tanımlıyoruz;

php artisan make:migration create_addresses_table


Migration içeriği;

public function up()
{
    Schema::create('addresses', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->text('address');
        $table->timestamps();
    });
}


Tanımladığımız migration'ı çalıştırıyoruz:

php artisan migrate


Tablomuzu temsil etmesi adına model dosyamızı oluşturuyoruz:

php artisan make:model Address


Test verileri elde etmek adına seeder oluşturuyoruz:

php artisan make:seeder AddressTableSeeder


Seeder içeriği;

<?php

use Illuminate\Database\Seeder;
use App\Address;

class AddressesTableSeeder extends Seeder
{
    public function run()
    {
        $faker = Faker\Factory::create();
        for ($i = 0; $i < 100; $i++) {
            Address::create([
                'address' => $faker->address
            ]);
        }
    }
}


Oluşturduğumuz seeder'ı database/seeds/DatabaseSeeder.php dosyasında çağırıyoruz:

public function run()
{
    $this->call(AddressesTableSeeder::class);
}


Ve çalıştırarak test verilerimizi elde ediyoruz:

php artisan db:seed


Tüm adresleri getirmek için bir route tanımlaması yapıyoruz:

Route::get('addresses', '[email protected]');


Route kısmında tanımlanan isteği karşılamak adına controller dosyamızı oluşturuyoruz:

php artisan make:controller AddressController


Öncelikle cache kullanmadan test edelim;


Controller içeriği;

<?php

namespace App\Http\Controllers;

use App\Address;

class AddressController extends Controller
{
    public function index()
    {
        $addresses = Address::all();
        return response()->json($addresses);        
    }
}


Projemizi ayağa kaldırıyoruz;

php artisan serve


Postman üzerinden test ediyoruz;


Şimdi de cache kullanıp test edelim;


Controller içeriği;

<?php

namespace App\Http\Controllers;

use App\Address;
use Illuminate\Support\Facades\Cache;

class AddressController extends Controller
{
    public function index()
    {
        $addresses = Cache::get('addresses', function () {
            return Address::all();
        });
        return response()->json($addresses);  
    }
}

Not: Burada yapılan işlem; cache içerisinde addresses isimli bir key varsa onun içeriğini getir, yoksa veriyi tablodan getir ve addresses isimli key'e kaydet.


Postman üzerinden test ediyoruz;


Görüldüğü üzere sonuç daha hızlı bir şekilde geldi. Biz bu örneğimizde 100 tane test verisi üzerinden gittik ve hız artışı elbette çok fazla belli olmadı. Projenin büyüdüğünü ve verinin 100.000 gibi sayılara çıktığını düşündüğümüzde hız artışı daha iyi bir şekilde görülecektir.


Cache kullanımıyla ilgili olarak şunlara da değinelim;

  • Cache'in olup olmadığını kontrol etmek için;
if (Cache::has('key')) {
 ...
}
  • Cache'i belli bir süreliğine (dakika bazında) kaydetmek için;
$addresses = Cache::remember('addresses', 60, function () {
    return Address::all();
});
  • Cache'i silmek için;
Cache::forget('key');


Umarım faydalı olmuştur.


İyi çalışmalar.

Yusuf Borucu

Benim adım Yusuf. 1993 yılında Şanlıurfa'da doğdum. 2015 yılında Bilecik Şeyh Edebali Üniversitesi'nde Bilgisayar Mühendisliği bölümünden mezun oldum. Şu anda özel bir şirkette Yazılım Geliştirici olarak çalışmaktayım. Yazılıma yönelik uğraştığım, sevdiğim ve ilgi duyduğum teknolojilerden bahsetmem gerekirse; Laravel, MySQL (mevcut çalıştığım şirkette uğraştıklarım). Asp.Net Mvc, MSSQL (önceden ça...

"Laravel'de Cache kullanımı" için hiç yorum yapılmadı.

Henüz yorum yapılmamış.

Yorum yap * E-posta adresiniz yayınlanmayacak.