キャッシングドライバ

CodeIgniter は、高速で動的なキャッシングの最も一般的な形式のいくつかをラップした機能を提供します。ファイルベースのキャッシング以外は、特定のサーバー要件が必要です。サーバー要件が満たされていない場合、致命的な例外がスローされます。

使用例

次の例は、コントローラ内での一般的な使用パターンを示しています。

<?php

if (! $foo = cache('foo')) {
    echo 'Saving to the cache!<br>';
    $foo = 'foobarbaz!';

    // Save into the cache for 5 minutes
    cache()->save('foo', $foo, 300);
}

echo $foo;

Services クラスを通じてキャッシュエンジンのインスタンスを直接取得できます

<?php

$cache = \Config\Services::cache();

$foo = $cache->get('foo');

キャッシュの設定

キャッシュエンジンのすべての設定は、**app/Config/Cache.php** で行われます。このファイルでは、以下の項目が利用可能です。

$handler

これは、エンジン起動時にプライマリハンドラとして使用されるハンドラの名前です。使用可能な名前は、dummy、file、memcached、redis、predis、wincache です。

$backupHandler

最初の選択肢 $handler が利用できない場合、これは次にロードされるキャッシュハンドラです。これは、ファイルシステムは常に利用可能であるため、一般的には File ハンドラですが、より複雑なマルチサーバー設定には適さない場合があります。

$prefix

同じキャッシュストレージを使用するアプリケーションが複数ある場合、すべてのキー名の前に付加されるカスタムプレフィックス文字列をここに追加できます。

$ttl

何も指定されていない場合にアイテムを保存するデフォルトの秒数です。

警告: これは、60 秒がハードコードされているフレームワークハンドラでは使用されませんが、プロジェクトやモジュールには役立つ場合があります。これは、将来のリリースでハードコードされた値に置き換えられます。

$file

これは、File ハンドラに固有の設定の配列であり、キャッシュファイルをどのように保存するかを決定します。

$memcached

これは、Memcache(d) ハンドラを使用する場合に使用されるサーバーの配列です。

$redis

Redis および Predis ハンドラを使用する場合に使用したい Redis サーバーの設定です。

コマンドラインツール

CodeIgniter には、コマンドラインからキャッシュの操作に役立ついくつかの コマンド が付属しています。これらのツールはキャッシュドライバを使用するために必須ではありませんが、役立つ場合があります。

cache:clear

現在のシステムキャッシュをクリアします

php spark cache:clear

cache:info

現在のシステムのファイルキャッシュ情報を表示します

php spark cache:info

注記

このコマンドは、ファイルキャッシュハンドラのみをサポートします。

クラスリファレンス

class CodeIgniter\Cache\CacheInterface
isSupported()
戻り値:

サポートされている場合は true、サポートされていない場合は false

戻り値の型:

bool

get($key) mixed
パラメータ:
  • **$key** (string) – キャッシュアイテム名

戻り値:

アイテムの値、見つからない場合は null

戻り値の型:

mixed

このメソッドは、キャッシュストアからアイテムを取得しようとします。アイテムが存在しない場合、メソッドは null を返します。

<?php

$foo = $cache->get('my_cached_item');
remember(string $key, int $ttl, Closure $callback)
パラメータ:
  • **$key** (string) – キャッシュアイテム名

  • **$ttl** (int) – 有効期限(秒)

  • **$callback** (Closure) – キャッシュアイテムが null を返した場合に呼び出すコールバック

戻り値:

キャッシュアイテムの値

戻り値の型:

mixed

キャッシュからアイテムを取得します。null が返された場合、これはコールバックを呼び出し、結果を保存します。いずれの場合も、これは値を返します。

save(string $key, $data[, int $ttl = 60[, $raw = false]])
パラメータ:
  • **$key** (string) – キャッシュアイテム名

  • $data (mixed) – 保存するデータ

  • $ttl (int) – Time To Live(生存時間)、秒単位(デフォルトは60)

  • $raw (bool) – 生の値を保存するかどうか

戻り値:

成功時は true、失敗時は false

戻り値の型:

bool

このメソッドは、アイテムをキャッシュストアに保存します。保存に失敗した場合、メソッドは false を返します。

<?php

$cache->save('cache_item_id', 'data_to_cache');

注記

$raw パラメータは、increment()decrement() の使用を許可するために、Memcache によってのみ利用されます。

delete($key) bool
パラメータ:
  • $key (string) – キャッシュされたアイテムの名前

戻り値:

成功時は true、失敗時は false

戻り値の型:

bool

このメソッドは、キャッシュストアから特定のアイテムを削除します。アイテムの削除に失敗した場合、メソッドは false を返します。

<?php

$cache->delete('cache_item_id');
deleteMatching($pattern) integer
パラメータ:
  • $pattern (string) – キャッシュされたアイテムのキーに一致させるglobスタイルのパターン

戻り値:

削除されたアイテムの数

戻り値の型:

整数

このメソッドは、globスタイルのパターンに対してキーを照合することにより、キャッシュストアから複数のアイテムを一度に削除します。削除されたアイテムの総数を返します。

重要

このメソッドは、File、Redis、およびPredisハンドラーに対してのみ実装されています。制限により、MemcachedおよびWincacheハンドラーには実装できませんでした。

<?php

$cache->deleteMatching('prefix_*'); // deletes all items of which keys start with "prefix_"
$cache->deleteMatching('*_suffix'); // deletes all items of which keys end with "_suffix"

globスタイルの構文の詳細については、Glob (programming) を参照ください。

increment($key[, $offset = 1]) mixed
パラメータ:
  • $key (string) – キャッシュID

  • $offset (int) – 加算するステップ/値

戻り値:

成功時は新しい値、失敗時は false

戻り値の型:

mixed

生の保存値のアトミックなインクリメントを実行します。

<?php

// 'iterator' has a value of 2
$cache->increment('iterator'); // 'iterator' is now 3
$cache->increment('iterator', 3); // 'iterator' is now 6
decrement($key[, $offset = 1]) mixed
パラメータ:
  • $key (string) – キャッシュID

  • $offset (int) – 減らすステップ/値

戻り値:

成功時は新しい値、失敗時は false

戻り値の型:

mixed

生の保存値のアトミックなデクリメントを実行します。

<?php

// 'iterator' has a value of 6
$cache->decrement('iterator'); // 'iterator' is now 5
$cache->decrement('iterator', 2); // 'iterator' is now 3
clean()
戻り値:

成功時は true、失敗時は false

戻り値の型:

bool

このメソッドは、キャッシュ全体を「クリーン」します。キャッシュファイルの削除に失敗した場合、メソッドはfalseを返します。

<?php

$cache->clean();
getCacheInfo()
戻り値:

キャッシュデータベース全体に関する情報

戻り値の型:

mixed

このメソッドは、キャッシュ全体に関する情報を返します。

<?php

var_dump($cache->getCacheInfo());

注記

返される情報とデータの構造は、使用されているアダプターによって異なります。

getMetadata(string $key)
パラメータ:
  • **$key** (string) – キャッシュアイテム名

戻り値:

キャッシュされたアイテムのメタデータ。存在しないアイテムの場合は null、または少なくとも絶対エポック有効期限の「expire」キーを持つ配列(期限切れにならない場合は null)。

戻り値の型:

配列|null

このメソッドは、キャッシュ内の特定のアイテムに関する詳細情報を返します。

<?php

var_dump($cache->getMetadata('my_cached_item'));

注記

返される情報とデータの構造は、使用されているアダプターによって異なります。一部のアダプター(File、Memcached、Wincache)は、存在しないアイテムに対して false を返します。

static validateKey(string $key, string $prefix)
パラメータ:
  • $key (string) – 潜在的なキャッシュキー

  • $prefix (string) – オプションのプレフィックス

戻り値:

検証済みおよびプレフィックス付きのキー。キーがドライバーの最大キー長を超える場合、ハッシュされます。

戻り値の型:

文字列

このメソッドは、ハンドラーメソッドによってキーが有効かどうかを確認するために使用されます。文字列以外、無効な文字、および長さゼロの場合、InvalidArgumentException をスローします。

<?php

use CodeIgniter\Cache\Handlers\BaseHandler;

$prefixedKey = BaseHandler::validateKey($key, $prefix);

ドライバー

ファイルベースのキャッシュ

出力クラスからのキャッシュとは異なり、ドライバーのファイルベースのキャッシュでは、ビューファイルの一部をキャッシュできます。ディスクI/Oがキャッシュによる正の効果を無効にする可能性があるため、注意して使用し、アプリケーションをベンチマークしてください。これは、アプリケーションがキャッシュディレクトリに実際に書き込みできる必要があります。

Memcached キャッシュ

Memcachedサーバーは、キャッシュ構成ファイルで指定できます。利用可能なオプションは次のとおりです。

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class Cache extends BaseConfig
{
    // ...

    public $memcached = [
        'host'   => '127.0.0.1',
        'port'   => 11211,
        'weight' => 1,
        'raw'    => false,
    ];

    // ...
}

Memcachedの詳細については、https://www.php.net/memcached を参照ください。

WinCache キャッシュ

Windowsでは、WinCacheドライバーも利用できます。

WinCacheの詳細については、https://www.php.net/wincache を参照ください。

Redis キャッシュ

Redisは、LRUキャッシュモードで動作できるインメモリキーバリューストアです。使用するには、Redisサーバーとphpredis PHP拡張機能 が必要です。

redisサーバーに接続するための設定オプションは、キャッシュ構成ファイルに保存されています。利用可能なオプションは次のとおりです。

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class Cache extends BaseConfig
{
    // ...

    public $redis = [
        'host'     => '127.0.0.1',
        'password' => null,
        'port'     => 6379,
        'timeout'  => 0,
        'database' => 0,
    ];

    // ...
}

Redisの詳細については、https://redis.io を参照ください。

Predis キャッシュ

Predisは、Redisキーバリューストアのための柔軟で機能豊富なPHPクライアントライブラリです。使用するには、プロジェクトルート内でコマンドラインから以下を実行します。

composer require predis/predis

Redisの詳細については、https://github.com/nrk/predis を参照ください。

ダミーキャッシュ

これは、常に「ミス」するキャッシュバックエンドです。データは保存されませんが、選択したキャッシュをサポートしていない環境でキャッシュコードをそのままにしておくことができます。