我正在使用Redis在Laravel 5.2中缓存查询/路由。
我在同一台Web服务器上运行3个环境,即"生产","分段"和"开发"。
对于每个环境,我都设置了不同的缓存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"
如何清除特定环境的缓存?
cache:clear命令将删除与数据库连接相关的所有缓存。
如果要对多个实例使用同一台Redis服务器,则可以为每个实例使用不同的Redis数据库。
在.env文件中,您可以添加以下内容
为您的生产环境
REDIS_DATABASE=0
为您的暂存环境
REDIS_DATABASE=1
针对您的开发环境
REDIS_DATABASE=2
然后在Redis部分的config\database.php中更改此行'database' => 0,
到'database' => env('REDIS_DATABASE', 0),
现在,您可以使用以下命令清除任何环境的缓存
php artisan cache:clear
cache:clear artisan命令的作用是在当前连接器上调用flush函数。由于缓存引擎随功能的变化而变化,我认为不可能选择性地使密钥过期以保持缓存API的通用性。像Redis这样的引擎提供了这样的功能,但是memcached却没有。
如果您使用的是Redis,则可以修改默认的连接器以对flush()方法使用'SCAN / DEL'命令。但这仍然不是很有效。
如果您的应用程序正确使用了缓存,则它不会重新生成缓存,因此不会造成任何问题。您永远不要期望某些数据在高速缓存中,因为它们可能总会过期。
当我执行php artisan cache:clear时,它会清除Redis中的所有内容。 我只是再次测试。 我看到的问题是,使用该应用程序的用户将收到Mismatch令牌错误,因为会话也被清除了。
解决方案是在Staging和Dev环境中对会话使用不同的存储类型,因此清除缓存不会影响实时用户。
我不能创建一个命令行来执行以下代码吗? $ redis = Cache :: getRedis(); $ keys = $ redis-> keys(Cache :: getPrefix()。" *"); foreach($ keys as $ key){Cache :: forget($ key); }
当然,只要您在缓存中没有成千上万的键,这可能会导致它超过可用内存,那应该就可以了。 直接与Redis对话,您可以使用SCAN / MATCH / COUNT命令组合。