web-dev-qa-db-ja.com

パターン/ワイルドカードでキャッシュキーを削除する

私はLumenでREST APIを構築していて、Redisでいくつかのルートをキャッシュしたいと思っています。例えば、使用するルート/ users/123/itemsの場合:

$items = Cache::remember('users:123:items', 60, function () {
  // Get data from database and return
});

ユーザーのアイテムに変更が加えられたら、次のコマンドでキャッシュをクリアします。

Cache::forget('users:123:items');

ここまでは順調ですね。ただし、ルート/ users/123および/ users/123/categoriesにも実装したキャッシュには、アイテムリストも含まれているため、これらもクリアする必要があります。これは私も実行する必要があることを意味します:

Cache::forget('users:123');
Cache::forget('users:123:categories');

将来的には、クリアするキャッシュがさらに増える可能性があります。そのため、次のようなパターン/ワイルドカード機能を探しています。

Cache::forget('users:123*');

Lumen/Laravelでこの動作に対応する方法はありますか?

18
j3491

キャッシュタグ を使用できます。

キャッシュタグを使用すると、キャッシュ内の関連するアイテムにタグを付け、特定のタグが割り当てられているすべてのキャッシュされた値をフラッシュできます。タグ名の順序付けされた配列を渡すことにより、タグ付きキャッシュにアクセスできます。たとえば、タグ付きキャッシュにアクセスして値をキャッシュに入れましょう:

Cache::tags(['people', 'artists'])->put('John', $john, $minutes);

タグまたはタグのリストが割り当てられているすべてのアイテムをフラッシュできます。たとえば、次のステートメントは、人物、作成者、またはその両方でタグ付けされたすべてのキャッシュを削除します。したがって、AnneとJohnの両方がキャッシュから削除されます。

Cache::tags(['people', 'authors'])->flush();
12
Alexey Mezenin