Cacheキャッシュ

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

注意
現在のマニュアルは webman v2 バージョンに基づいています。webman v1 バージョンを使用している場合は、v1バージョンマニュアルをご覧ください。

インストール

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.driverは4種類のドライバーをサポートしています。fileredisarrayapcu

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

ヒント
Key 名は PSR6 によって制限され、{}()/\@: のいずれかの文字を含むことはできませんが、現時点(symfony/cache 7.2.4)では、PHP ini 設定 zend.assertions=-1 を使用してこのチェックを一時的にバイパスできます。

他のCacheコンポーネントの使用

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