Cache Items

Cache items are the information units stored in the cache as a key/value pair. In the Cache component they are represented by the CacheItem class. They are used in both the Cache Contracts and the PSR-6 interfaces.

キャッシュ アイテムは、キーと値のペアとしてキャッシュに格納される情報単位です。キャッシュ コンポーネントでは、CacheItem クラスによって表されます。キャッシュ コントラクトと PSR-6 インターフェイスの両方で使用されます。

Cache Item Keys and Values

The key of a cache item is a plain string which acts as its identifier, so it must be unique for each cache pool. You can freely choose the keys, but they should only contain letters (A-Z, a-z), numbers (0-9) and the _ and . symbols. Other common symbols (such as {, }, (, ), /, \, @ and :) are reserved by the PSR-6 standard for future uses.

キャッシュ アイテムのキーは、その識別子として機能するプレーンな文字列であるため、キャッシュ プールごとに一意である必要があります。キーは自由に選択できますが、文字 (A ~ Z、a ~ z)、数字 (0 ~ 9)、_ および .シンボル。その他の一般的な記号 ({、}、(,)、/、\、@、: など) は、将来の使用のために PSR-6 標準によって予約されています。

The value of a cache item can be any data represented by a type which is serializable by PHP, such as basic types (string, integer, float, boolean, null), arrays and objects.

キャッシュ項目の値は、基本的な型 (string、integer、float、boolean、null)、配列、オブジェクトなど、PHP でシリアライズ可能な型で表される任意のデータにすることができます。

Creating Cache Items

The only way to create cache items is via cache pools. When using the Cache Contracts, they are passed as arguments to the recomputation callback:

キャッシュ アイテムを作成する唯一の方法は、キャッシュ プールを使用することです。 CacheContracts を使用する場合、それらは引数として再計算コールバックに渡されます。
1
2
3
4
// $cache pool object was created before
$productsCount = $cache->get('stats.products_count', function (ItemInterface $item) {
    // [...]
});

When using PSR-6, they are created with the getItem($key) method of the cache pool:

PSR-6 を使用する場合、キャッシュプールの getItem($key) メソッドで作成されます。
1
2
// $cache pool object was created before
$productsCount = $cache->getItem('stats.products_count');

Then, use the Psr\Cache\CacheItemInterface::set method to set the data stored in the cache item (this step is done automatically when using the Cache Contracts):

次に、Psr\Cache\CacheItemInterface::set メソッドを使用して、キャッシュ アイテムに格納されているデータを設定します (この手順は、キャッシュ コントラクトを使用すると自動的に行われます)。
1
2
3
4
5
6
7
8
9
10
// storing a simple integer
$productsCount->set(4711);
$cache->save($productsCount);

// storing an array
$productsCount->set([
    'category1' => 4711,
    'category2' => 2387,
]);
$cache->save($productsCount);

The key and the value of any given cache item can be obtained with the corresponding getter methods:

特定のキャッシュ アイテムのキーと値は、対応する getter メソッドを使用して取得できます。
1
2
3
4
$cacheItem = $cache->getItem('exchange_rate');
// ...
$key = $cacheItem->getKey();
$value = $cacheItem->get();

Cache Item Expiration

By default, cache items are stored permanently. In practice, this "permanent storage" can vary greatly depending on the type of cache being used, as explained in the Cache Pools and Supported Adapters article.

デフォルトでは、キャッシュ アイテムは永続的に保存されます。実際には、この「永続的なストレージ」は、キャッシュ プールとサポートされるアダプターの記事で説明されているように、使用されているキャッシュの種類によって大きく異なります。

However, in some applications it's common to use cache items with a shorter lifespan. Consider for example an application which caches the latest news just for one minute. In those cases, use the expiresAfter() method to set the number of seconds to cache the item:

ただし、一部のアプリケーションでは、寿命が短いキャッシュ アイテムを使用するのが一般的です。たとえば、最新のニュースを 1 分間だけキャッシュするアプリケーションを考えてみましょう。そのような場合は、expiresAfter() メソッドを使用して、アイテムをキャッシュする秒数を設定します。
1
2
3
4
$latestNews->expiresAfter(60);  // 60 seconds = 1 minute

// this method also accepts \DateInterval instances
$latestNews->expiresAfter(DateInterval::createFromDateString('1 hour'));

Cache items define another related method called expiresAt() to set the exact date and time when the item will expire:

キャッシュ アイテムは、アイテムの有効期限が切れる正確な日時を設定するために、expiresAt() と呼ばれる別の関連メソッドを定義します。
1
$mostPopularNews->expiresAt(new \DateTime('tomorrow'));

Cache Item Hits and Misses

Using a cache mechanism is important to improve the application performance, but it should not be required to make the application work. In fact, the PSR-6 document wisely states that caching errors should not result in application failures.

キャッシュ メカニズムを使用することは、アプリケーションのパフォーマンスを向上させるために重要ですが、アプリケーションを機能させるために必須ではありません。実際、PSR-6 は、キャッシング エラーがアプリケーションの障害につながるべきではないと明言しています。

In practice with PSR-6, this means that the getItem() method always returns an object which implements the Psr\Cache\CacheItemInterface interface, even when the cache item doesn't exist. Therefore, you don't have to deal with null return values and you can safely store in the cache values such as false and null.

PSR-6 を実際に使用すると、これは、キャッシュ アイテムが存在しない場合でも、getItem() メソッドが常に Psr\Cache\CacheItemInterface インターフェイスを実装するオブジェクトを返すことを意味します。したがって、null の戻り値を処理する必要はなく、false や null などの値を安全にキャッシュに格納できます。

In order to decide if the returned object represents a value coming from the storage or not, caches use the concept of hits and misses:

返されたオブジェクトがストレージからの値を表しているかどうかを判断するために、キャッシュはヒットとミスの概念を使用します。
  • Cache Hits occur when the requested item is found in the cache, its value is not corrupted or invalid and it hasn't expired;
    キャッシュ ヒットは、要求されたアイテムがキャッシュ内で見つかり、その値が破損または無効ではなく、有効期限が切れていない場合に発生します。
  • Cache Misses are the opposite of hits, so they occur when the item is not found in the cache, its value is corrupted or invalid for any reason or the item has expired.
    キャッシュ ミスはヒットの反対であるため、アイテムがキャッシュで見つからない場合、その値が何らかの理由で壊れているか無効である場合、またはアイテムの有効期限が切れている場合に発生します。

Cache item objects define a boolean isHit() method which returns true for cache hits:

キャッシュ アイテム オブジェクトは、キャッシュ ヒットに対して true を返すブール値の isHit() メソッドを定義します。
1
2
3
4
5
6
7
8
9
$latestNews = $cache->getItem('latest_news');

if (!$latestNews->isHit()) {
    // do some heavy computation
    $news = ...;
    $cache->save($latestNews->set($news));
} else {
    $news = $latestNews->get();
}