Відстеження активності кешу за допомогою подій у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 26 червня, 2025
Ви коли-небудь задумувались, як ефективно відстежувати операції кешування у вашій програмі на Laravel? Ми розглянемо, як система подій кешу може допомогти вам отримати цінні дані про продуктивність та використовувати їх для покращення вашого додатку. Читайте далі, щоб дізнатися більше!

Система подій кешу в Laravel дозволяє детально моніторити операції кешування у вашій аплікації. Ці події надають корисну інформацію про продуктивність кешу та його використання.

Laravel генерує специфічні події для різних дій з кешем:

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

Ви можете створювати прослуховувачі для цих подій, щоб збирати дані про продуктивність або виконувати додаткові дії залежно від поведінки кешу.

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}");
});

Ось як виглядає всебічна система аналітики кешу, що відстежує всі операції з кешем:

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']
        ]);
    }
}

Слід врахувати, що моніторинг подій може вплинути на продуктивність. Ви можете вимкнути його для конкретного кеш-зберігання у вашій конфігурації за потреби