如何使用命令行清除Laravel中的缓存?

9 浏览
0 Comments

如何使用命令行清除Laravel中的缓存?

我在Laravel 5.2中使用Redis来缓存查询和路由。在同一台web服务器上,我有三个环境,即\"production\"、\"staging\"和\"development\"。为了使缓存与不同的环境相关联,我为每个环境设置了不同的缓存前缀值。在config/cache.php文件中,我将以下行改为:\n\'prefix\' => ENV(\'CACHE_PREFIX\', \'laravel\'),\n然后在我的.env文件中,我添加了每个环境的前缀,例如:\n对于Dev\nCACHE_PREFIX=\"LaravelDev\"\n对于Staging\nCACHE_PREFIX=\"LaravelStaging\"\n对于Production\nCACHE_PREFIX=\"LaravelProduction\"\n我知道可以通过命令行清除缓存,例如:\nphp artisan cache:clear\n但是上述代码将清除所有环境的缓存。我只想清除\"LaravelDev\"的缓存,而保留\"LaravelStaging\"和\"LaravelProduction\"的缓存。如何清除特定环境的缓存呢?

0
0 Comments

在Laravel中使用命令行如何清除缓存?

Laravel中的cache:clear命令会调用当前连接器上的flush函数。由于缓存引擎的功能不同,我认为不可能选择性地过期键,以保持缓存API的通用性。例如,Redis等引擎提供了这样的功能,但是memcached则没有。

如果你使用Redis,你可以修改默认的连接器,使用'SCAN / DEL'命令来执行flush()方法。然而,这样做并不会非常有效。

如果你的应用程序正确使用缓存,清除缓存不应该引起任何问题,因为缓存会重新构建。你不应该期望某些数据会一直存在于缓存中,因为它们可能会过期。

当我执行php artisan cache:clear时,它会清除Redis中的所有内容。我刚刚再次测试了一下。我看到的问题是,使用应用程序的用户会收到“密令令牌不匹配”的错误,因为会话也被清除了。

解决方法是在Staging和Dev环境中为会话使用不同的存储类型,这样清除缓存就不会影响到实际用户。

我能不能创建一个命令行,执行以下代码呢?

$redis = Cache::getRedis();
$keys = $redis->keys(Cache::getPrefix() . "*");
foreach($keys as $key)
{
    Cache::forget($key);
}

当然可以,只要你的缓存中没有成千上万个键,否则可能会超出可用内存。直接与Redis通信,你可以使用SCAN / MATCH / COUNT命令组合。

0
0 Comments

laravel中如何使用命令行清除缓存?

在laravel中,我们可以使用命令行来清除缓存。下面是解决这个问题的原因和解决方法。

原因:

在laravel中,我们可以使用REDIS_CACHE_DB环境变量来定义不同的redis数据库,以实现在不同的环境下清除缓存。

解决方法:

1. 首先,我们可以通过设置不同的REDIS_CACHE_DB环境变量来定义不同的redis数据库。在.env文件中,为每个环境(生产/阶段/开发)定义不同的REDIS_CACHE_DB值。

例如,在.env.production文件中,设置REDIS_CACHE_DB=1;在.env.stage文件中,设置REDIS_CACHE_DB=2;在.env.development文件中,设置REDIS_CACHE_DB=3。

2. 在更改.env文件后,请不要忘记清除配置缓存。我们可以使用以下命令来清除配置缓存:

php artisan config:clear

通过上述步骤,我们可以使用命令行清除laravel中的缓存。

希望这对你有帮助!

0