13

私のパッケージでは、Laravel キャッシュを利用しています。

作成するすべてのキャッシュ キーにはプレフィックスが付けられるためmypackage-configmypackage-md5ofafilenameパッケージが作成したすべてのキャッシュ ファイルをフラッシュする必要がある場合があります。私はキャッシュ キーのパターンしか知りません。キー全体はわかりません。

それで、私は行く方法Cache::forget('mypackage-*')または同様の方法が必要です、これは可能ですか?

自分のシステムだけの場合は、ファイル キャッシュを使用していることはわかっているので、手動でファイルのリンクを解除できますが、これは汎用パッケージであるため、エンド ユーザーが使用しているキャッシュ方法はわかりません。インターフェースを知っているだけです。 (別名Laravelキャッシュインターフェース)。

4

4 に答える 4

16

別の解決策:ファイルまたはデータベース キャッシュを使用していない限り、 Cache Tagsを利用できます。

すべてのキャッシュ エントリにパッケージ名をタグ付けするだけです。

Cache::tags('myPackage')->put('config', $config, $minutes);
Cache::tags('myPackage')->put('md5ofafilename', $md5, $minutes);

( 、、および でtagsメソッドを使用することもできます)rememberforeverrememberForever

パッケージのエントリのキャッシュをフラッシュするときは、次のようにします

Cache::tags('myPackage')->flush();

注: キャッシュ エントリにアクセスする必要がある場合でも、タグを参照する必要があります。例えば

$myConfig = Cache::tags('myPackage')->get('config');

configそうすれば、別のタグ (例: ) を持つキーを持つ別のキャッシュ エントリがhisPackage競合しなくなります。

于 2014-10-13T12:21:07.553 に答える
12

簡単 - 使用Cache::getMemory()

foreach (Cache::getMemory() as $cacheKey => $cacheValue)
{
    if (strpos($cacheKey, 'mypackage') !== false)
    {
        Cache::forget($cacheKey);
    }
}

ps「キャッシュ」ファイルを手動でリンク解除しないでください。Laravel キャッシュは、すべてのキャッシュ レコードの記録を配列に保持するため、「リンクを解除」したとしても、ファイルがそこにあると想定されます。

于 2013-02-14T11:35:56.993 に答える