在Laravel中,我们可以用以下方式存储缓存:
Cache::put($dynamickey, 'value', $minutes);
但是这将导致越来越多的缓存文件存储,即使它已经过期。如果我们尝试使用php artisan cache:clear
或Cache::flush();
清除它,它将清除所有缓存,包括仍然有效的缓存。
是否可以进行自动清理,只清除过期的缓存?感谢。
答案 0 :(得分:0)
$value = Cache::remember('users', function()
{
return DB::table('users')->get();
});
是否有效。它验证具有给定键的缓存是否存在并返回其值。它不存在或过期,然后用新值刷新给定的缓存键。
对于图像缓存,我使用如下逻辑:
然后
if(Cache :: has($ cacheKey_name)&&!Cache :: has($ cacheKey_content)) { 缓存::忘记($ cacheKey_name); 缓存::忘记($ cacheKey_content); }
它将检查图像是否已缓存且仅更改了内容。如果是,则删除旧缓存并缓存新图像(使用新内容)。有了这个逻辑,你将拥有新鲜的图像内容(覆盖图像)。
或者,您始终可以创建工匠任务并创建Controller以检查存储目录中的所有缓存数据,然后创建Cron任务。
答案 1 :(得分:0)
你可以创建一个像这样的函数
function cache($key,$value,$min){
(Cache::has($key))?Cache::put($key,$value,$min):Cache::add($key,$value,$min);
if(Cache::has('caches')){
$cache=Cache::get('caches');
$cache[time()+(60*$min)]=$key;
Cache::forget('caches');
Cache::rememberForever('caches',function() use($cache){
return $cache;
});
}else{
$cache[time()+(60*$min)]=$key;
Cache::rememberForever('caches',function() use($cache){
return $cache;
});
}
$cache=Cache::get('caches');
foreach($cache as $key=>$value)
{
if($key<time())
{
Cache::forget($value);
array_forget($cache, $key);
}
}
Cache::forget('caches');
Cache::rememberForever('caches',function() use($cache){
return $cache;
});}
并删除此缓存空文件夹,您可以编辑
vendor\laravel\framework\src\Illuminate\Cache\FileStore.php
第182行在此代码之后
public function forget($key)
{
$file = $this->path($key);
if ($this->files->exists($file))
{
$this->files->delete($file);
添加一个删除所有空文件夹的功能,例如吹码
public function forget($key)
{
$file = $this->path($key);
if ($this->files->exists($file))
{
$this->files->delete($file);
RemoveEmptySubFolders($this->getDirectory());
使用此功能可以看到它 Remove empty subfolders with PHP