Laravel Tutorials

Tracking Cache Activity with Laravel Events

Published
Tracking Cache Activity with Laravel Events image

Laravel's cache event system enables comprehensive monitoring of cache operations throughout your application. These events provide insights into cache performance and usage patterns.

Laravel fires specific events for different cache activities:

use Illuminate\Cache\Events\{
CacheHit,
CacheMissed,
KeyForgotten,
KeyWritten
};

You can create listeners to respond to these events and gather performance data or trigger additional actions based on cache behavior.

use Illuminate\Support\Facades\Event;
 
Event::listen(function (CacheHit $event) {
Log::info("Cache hit for key: {$event->key}");
});
 
Event::listen(function (CacheMissed $event) {
Log::info("Cache miss for key: {$event->key}");
});

Here's a comprehensive cache analytics system that tracks all cache operations:

use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\DB;
 
class CacheAnalyticsService
{
public function registerListeners()
{
Event::listen(function (CacheHit $event) {
$this->trackCacheOperation('hit', [
'cache_key' => $event->key,
'store' => $event->store ?? 'default',
'timestamp' => now()
]);
});
 
Event::listen(function (CacheMissed $event) {
$this->trackCacheOperation('miss', [
'cache_key' => $event->key,
'store' => $event->store ?? 'default',
'timestamp' => now()
]);
});
 
Event::listen(function (KeyWritten $event) {
$this->trackCacheOperation('write', [
'cache_key' => $event->key,
'expiry_seconds' => $event->seconds,
'store' => $event->store ?? 'default',
'timestamp' => now()
]);
});
 
Event::listen(function (KeyForgotten $event) {
$this->trackCacheOperation('delete', [
'cache_key' => $event->key,
'store' => $event->store ?? 'default',
'timestamp' => now()
]);
});
}
 
private function trackCacheOperation(string $operation, array $metadata)
{
DB::table('cache_analytics')->insert([
'operation_type' => $operation,
'cache_key' => $metadata['cache_key'],
'store_name' => $metadata['store'],
'expiry_time' => $metadata['expiry_seconds'] ?? null,
'recorded_at' => $metadata['timestamp']
]);
}
}

Event monitoring can impact performance, so you can disable it per cache store in your configuration when needed.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

serpapi logo
SerpApi

The Web Search API for Your LLM and AI Applications

Visit SerpApi

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article