TL:DR 您需要的功能默认不可用,您需要定制包装器方法,并需要了解所选缓存驱动程序(基础技术)的"
技术"知识。
Laravel缓存支持多种技术(驱动程序),包括
redis
、
database
、
file
、
memcached
等。所有这些驱动程序都实现了相同的接口。
namespace Illuminate\Contracts\Cache;
interface Store
{
public function get($key);
public function many(array $keys);
public function put($key, $value, $minutes);
public function putMany(array $values, $minutes);
public function increment($key, $value = 1);
public function decrement($key, $value = 1);
public function forever($key, $value);
public function forget($key);
public function flush();
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);
}
有一个技巧是要注意缓存前缀。如果您正在使用缓存前缀(在缓存配置文件中定义),那么您需要将这些前缀添加到键中。
对于您的第二个问题(删除所有类别的缓存),有几种方法可以实现,但其中一些方法可能不太适合生产环境/性能。在redis中,您可以执行一些命令,如keys
或scan
,以遍历数据库,然后使用返回的结果调用先前定义的方法。
特别是keys
命令应该小心谨慎地在生产环境中使用。
Redis只是一个示例 - 如果您将使用database
缓存驱动程序,则需要实现方法以满足您的情况。这将需要技术知识,了解laravel是如何通过数据库(表,查询等)来实现它以及您的扩展方法将如何使用它(表,查询,列,索引等)。