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

Posted

技术标签:

【中文标题】如何使用命令行清除 laravel 中的缓存?【英文标题】:How can I clear the cache in laravel using command line? 【发布时间】:2016-11-10 10:06:40 【问题描述】:

我正在使用 Redis 在 Laravel 5.2 中缓存查询/路由。

我有 3 个环境在同一个 Web 服务器上运行,即“生产”、“暂存”和“开发”。

对于每个环境,我设置了不同的缓存 prefix 值,以允许我将缓存链接到不同的环境。

config/cache.php 文件中我更改了行

'prefix' => 'laravel',

'prefix' => ENV('CACHE_PREFIX', 'laravel'),

然后在我的.env 文件中,我为每个环境添加了这样的前缀

开发者

CACHE_PREFIX="LaravelDev"

暂存

CACHE_PREFIX="LaravelStaging"

用于生产

CACHE_PREFIX="LaravelProduction"

我知道我可以像这样从命令行清除缓存

php artisan cache:clear

但是上面的代码会清除我所有环境的缓存。

我只想清除“LaravelDev”的缓存,不理会“LaravelStaging”和“LaravelProduction”

如何清除特定环境的缓存?

【问题讨论】:

【参考方案1】:

您可以使用不同的 redis 数据库,而不是使用 CACHE_PREFIX。例如:生产 => 1,暂存 => 2,开发 => 3。 如果您想更熟悉它,请使用此链接:

    What's the Point of Multiple Redis Databases? List All Redis Databases

因此,在每个环境(生产/阶段/开发)的 .env 文件中,您需要定义不同的 REDIS_CACHE_DB env 值。

到该行的链接使用此变量 https://github.com/laravel/laravel/blob/2a2522d8824c0852e30a7e3e07d46a543eb4b33d/config/database.php#L142 。 .env 示例:

.env.production

REDIS_CACHE_DB=1

.env.stage

REDIS_CACHE_DB=2

.env.development

REDIS_CACHE_DB=3

更改环境变量后不要忘记清除配置缓存:https://laravel.com/docs/7.x/configuration#configuration-caching

希望这会有所帮助!

【讨论】:

【参考方案2】:

cache:clear artisan 命令在当前连接器上调用flush 函数。由于缓存引擎因功能而异,我认为不可能有选择地使密钥过期,从而保持缓存 API 的通用性。 Redis 等引擎提供了此类功能,但 memcached 等引擎不提供。

如果您使用的是 Redis,您可以修改默认连接器以对 flush() 方法使用“SCAN / DEL”命令。这仍然不会很有效。

如果您的应用程序正确使用缓存刷新,则不会导致任何问题,因为缓存会自行重建。您永远不要期望缓存中有一些数据,因为它可能会过期。

【讨论】:

当我执行 php artisan cache:clear 时,它会清除 Redis 中的所有内容。我刚刚又测试了一遍。我看到的问题是使用该应用程序的用户将收到不匹配令牌错误,因为会话也被清除。 解决方案是在 Staging 和 Dev 环境中为会话使用不同的存储类型,因此清除缓存不会影响实时用户。 我不能创建一个命令行来执行以下代码吗? $redis = 缓存::getRedis(); $keys = $redis->keys(Cache::getPrefix() . "*"); foreach($keys as $key) 缓存::forget($key); 当然,只要您的缓存中没有数千个可能导致其超出可用内存的键,这应该可以工作。直接与 Redis 对话,您可以使用 SCAN / MATCH / COUNT 命令组合。

以上是关于如何使用命令行清除 laravel 中的缓存?的主要内容,如果未能解决你的问题,请参考以下文章

我们如何清除Laravel中的控制器和模型缓存

Laravel 5 – 清除共享主机服务器中的缓存

Laravel 5 – 清除共享主机服务器中的缓存

使用命令行清除 Android 设备的 DNS 缓存

如何关闭Laravel的缓存

如何在 cpanel 中运行工匠命令