Cache, veritabanından sürekli veri çekmek yerine bellekte hızlı bir şekilde veri almayı sağlayan bir sistemdir. Bu sayede uygulamanızın performansı önemli ölçüde artar.
👉 Performans artışı sağlar.
use Illuminate\Support\Facades\Cache;
use App\Models\Product;
$products = Cache::rememberForever('active_products', function () {
return Product::with('category')->where('active', 1)->get();
});
🧠 Bu nasıl çalışır?
- İlk seferde veritabanından veri alınır.
- Sonraki işlemlerde veri cache’den sağlanır.
- Manuel olarak temizlenmedikçe veriler sürekli saklanır.
Önemli: Ürün güncellendiğinde cache güncellenmez ❌
📍 app/Traits/ClearsCache.php
namespace App\Traits;
use Illuminate\Support\Facades\Cache;
trait ClearsCache
{
protected function clearCache(string $key): void
{
Cache::forget($key);
}
}
📍 Observer oluşturma:
php artisan make:observer ProductObserver --model=Product
✍️ Observer kodu:
namespace App\Observers;
use App\Models\Product;
use App\Traits\ClearsCache;
use App\Events\ProductUpdated;
class ProductObserver
{
use ClearsCache;
protected function clearAll(): void
{
$this->clearCache();
}
public function created(Product $product)
{
$this->clearAll();
event(new ProductUpdated());
}
public function updated(Product $product)
{
$this->clearAll();
event(new ProductUpdated());
}
public function deleted(Product $product)
{
$this->clearAll();
event(new ProductUpdated());
}
}
📍 AppServiceProvider.php
use App\Models\Product;
use App\Observers\ProductObserver;
public function boot(): void
{
Product::observe(ProductObserver::class);
}
use Illuminate\Support\Facades\Cache;
use App\Models\Product;
public static function getEloquentQuery()
{
return Cache::rememberForever(, function () {
return Product::with()->where(, 1);
});
}
📍 ListProducts.php
protected $listeners = [=> ];
🧩 Köprü Olay
use Illuminate\Support\Facades\Event;
use App\Events\ProductUpdated;
public function mount(): void
{
parent::mount();
Event::listen(ProductUpdated::class, function () {
$this->dispatch();
});
}
Admin ürünü güncelliyor
↓
Observer çalışıyor
↓
Cache temizleniyor
↓
Olay tetikleniyor
↓
Livewire, olayı yakalıyor
↓
UI güncelleniyor ($refresh)
↓
Kullanıcı güncellenmiş verileri görüyor
✅ Cache isimlendirme
İyi:
- active_products
- active_products_with_category
Kötü:
✅ Her zaman değişiklikte cache’i temizleyin
✅ Observer kullanın (controller yerine)
✔ Temiz
✔ Ölçeklenebilir
Cache = hız ⚡
Observer = tazelik 🔄
Trait = yeniden kullanım ♻️
Event = iletişim 📡
Livewire = UI güncellemeleri 🎯
“Cache okuma hızını artırır, Observer tazeliği korur, Livewire UI’yi günceller.”
Kaynak: Orijinal Makale


