キャッシュ

webman/cachesymfony/cacheをベースとしたキャッシュコンポーネントで、コルーチン環境と非コルーチン環境の両方に対応し、接続プールをサポートしています。

インストール

composer require -W webman/cache

<?php
namespace app\controller;

use support\Request;
use support\Cache;

class UserController
{
    public function db(Request $request)
    {
        $key = 'test_key';
        Cache::set($key, rand());
        return response(Cache::get($key));
    }
}

設定ファイルの場所

設定ファイルは config/cache.php にあります。存在しない場合は手動作成してください。

設定ファイルの内容

<?php
return [
    'default' => 'file',
    'stores' => [
        'file' => [
            'driver' => 'file',
            'path' => runtime_path('cache')
        ],
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default'
        ],
        'array' => [
            'driver' => 'array'
        ],
        'apcu' => [
            'driver' => 'apcu'
        ]
    ]
];

stores.driverfileredisarrayapcu の4種類のドライバをサポートしています。

file ドライバ

デフォルトのドライバです。外部コンポーネントに依存しません。プロセス間でのキャッシュ共有をサポートします。複数サーバー間での共有はサポートしません。

array ドライバ

メモリストレージで最高のパフォーマンスを発揮しますが、メモリを消費します。プロセス間・サーバー間での共有をサポートしません。プロセス再起動後にデータは失われます。キャッシュデータ量が少ないプロジェクトに適しています。

apcu ドライバ

メモリストレージです。パフォーマンスは array に次ぎます。プロセス間でのキャッシュ共有をサポートします。複数サーバー間での共有はサポートしません。プロセス再起動後にデータは失われます。キャッシュデータ量が少ないプロジェクトに適しています。

APCu 拡張機能のインストールと有効化が必要です。キャッシュの書き込み・削除が頻繁なシナリオには不向きで、顕著なパフォーマンス低下の原因になることがあります。

redis ドライバ

webman/redis コンポーネントに依存します。プロセス間・サーバー間でのキャッシュ共有をサポートします。

stores.redis.connection

stores.redis.connectionconfig/redis.php で定義されたキーに対応します。Redis を使用する際は、接続プール設定を含む webman/redis の設定を再利用します。

config/redis.php にキャッシュ用の専用設定を追加することを推奨します。例:

<?php
return [
    'default' => [
        'password' => 'abc123',
        'host' => '127.0.0.1',
        'port' => 6379,
        'database' => 0,
    ],
    'cache' => [ // <==== 新規追加
        'password' => 'abc123',
        'host' => '127.0.0.1',
        'port' => 6379,
        'database' => 1,
        'prefix' => 'webman_cache-',
    ]
];

続いて stores.redis.connectioncache に設定します。最終的な config/cache.php は以下のようになります:

<?php
return [
    'default' => 'redis', // <====
    'stores' => [
        'file' => [
            'driver' => 'file',
            'path' => runtime_path('cache')
        ],
        'redis' => [
            'driver' => 'redis',
            'connection' => 'cache' // <====
        ],
        'array' => [
            'driver' => 'array'
        ]
    ]
];

ストアの切り替え

次のように手動でストアを切り替え、異なるドライバを使用できます:

Cache::store('redis')->set('key', 'value');
Cache::store('array')->set('key', 'value');

ヒント
キャッシュキー名は PSR-6 により制限され、{}()/\@: のいずれの文字も含めることはできません。symfony/cache 7.2.4 以降、PHP ini の zend.assertions=-1 によりこのチェックを一時的にスキップできます。

他のキャッシュコンポーネントの使用

ThinkCache コンポーネントについては、その他のデータベース を参照してください。