私はLaravelの初心者です。
私は自分のプロジェクトLaravel7で使用しています。
プロジェクトにキャッシュシステムがあります。
プロジェクトにキー付きのキャッシュがあります。
- カテゴリー
- category.id
- category.subcategory.id
- product.all
等
キャッシュを削除する機能が必要です。
私はこれを書きます:
private function deleteCache(string $keyToRemove)
{
Cache::forget($keyToRemove);
}
ユニバーサルキャッシュの削除は可能ですか?
次のような関数が必要です
選択したキーを削除します。
deleteCache(['category.100'、 'product.all'、 'category.1'])
カテゴリ付きのすべてのキャッシュを削除します(例:category.1、category.all、category、category.tree、category.subcategory.1など)。
deleteCache(['category。*'])
どうすれば作れますか?
TL:DR必要なものはデフォルトでは使用できません。選択したキャッシュドライバー(基盤となるテクノロジ)に関する「技術的な」知識を必要とする、カスタマイズされたラッパーメソッドが必要です。
Laravelキャッシュサポートを含む複数の技術(ドライバー)redis
、database
、file
、memcached
などのすべてのこれらのドライバは、同じインターフェイスを実装します。
namespace Illuminate\Contracts\Cache;
interface Store
{
/**
* Retrieve an item from the cache by key.
*
* @param string|array $key
* @return mixed
*/
public function get($key);
/**
* Retrieve multiple items from the cache by key.
*
* Items not found in the cache will have a null value.
*
* @param array $keys
* @return array
*/
public function many(array $keys);
/**
* Store an item in the cache for a given number of minutes.
*
* @param string $key
* @param mixed $value
* @param float|int $minutes
* @return void
*/
public function put($key, $value, $minutes);
/**
* Store multiple items in the cache for a given number of minutes.
*
* @param array $values
* @param float|int $minutes
* @return void
*/
public function putMany(array $values, $minutes);
/**
* Increment the value of an item in the cache.
*
* @param string $key
* @param mixed $value
* @return int|bool
*/
public function increment($key, $value = 1);
/**
* Decrement the value of an item in the cache.
*
* @param string $key
* @param mixed $value
* @return int|bool
*/
public function decrement($key, $value = 1);
/**
* Store an item in the cache indefinitely.
*
* @param string $key
* @param mixed $value
* @return void
*/
public function forever($key, $value);
/**
* Remove an item from the cache.
*
* @param string $key
* @return bool
*/
public function forget($key);
/**
* Remove all items from the cache.
*
* @return bool
*/
public function flush();
/**
* Get the cache key prefix.
*
* @return string
*/
public function getPrefix();
}
選択したドライバーに応じて、必要なものを実現するためにカスタマイズされたメソッドが必要です。
最初の質問では、次の方法が複数のキーを削除するのに役立ちます。
public function deleteCache(array $keys)
{
foreach ($keys as $key) {
Cache::forget($key);
}
}
私はredisに精通しているので、その周りの例を示します。redis
キャッシュドライバーとして使用する場合は、このようにメソッドを変更することをお勧めします。redisのdelete
コマンドは、一度に複数のキーを削除することをサポートしているためです。これは前のものより効果的です。
public function deleteCache(array $keys)
{
Redis::del($keys);
}
1つのトリックは、に注意することcache prefix
です。キャッシュプレフィックス(キャッシュ設定ファイルで定義)を使用している場合は、それらのプレフィックスをキーの前に追加する必要があります。
2番目の質問(カテゴリを含むすべてのキャッシュを削除する)については、いくつかの方法がありますが、パフォーマンスや本番環境に適さないものもあります。redisでは、keys
またはなどのコマンドを実行しscan
てデータベースを反復処理し、以前に定義したメソッドを呼び出して、返された結果を得ることができます。
特にkeys
コマンドは、細心の注意を払って本番環境でのみ使用する必要があります。
Redisは単なる例でdatabase
あり、キャッシュドライバーを使用する場合は、ケースを満たすためのメソッドを実装する必要があります。laravelがデータベースを介してそれを実装する方法(テーブル、クエリなど)と拡張メソッドがそれを使用する方法(テーブル、クエリ、列、インデックスなど)の両方に関する技術的な知識が必要になります
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加