Laravel 4清除所有过期缓存

Posted

技术标签:

【中文标题】Laravel 4清除所有过期缓存【英文标题】:Laravel 4 clear all expired cache 【发布时间】:2013-12-05 08:21:16 【问题描述】:

在 Laravel 中,我们可以这样存储缓存:

Cache::put($dynamickey, 'value', $minutes);

但这最终会存储越来越多的缓存文件,即使在过期后也是如此。如果我们尝试使用php artisan cache:clearCache::flush(); 清理它,它将清除所有缓存,包括仍然有效的缓存。

是否可以进行自动清理以仅清除过期缓存?谢谢。

【问题讨论】:

你应该考虑使用 memcached 或 redis 之类的东西。 为什么不让它过期呢?之后文件将被删除。 【参考方案1】:

你可以创建这样的函数

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

【讨论】:

【参考方案2】:
$value = Cache::remember('users', function()

    return DB::table('users')->get();
);

做的工作。它验证具有给定键的缓存是否存在并返回其值。如果它不存在或过期,则使用新值刷新给定的缓存键。

对于图像缓存,我使用如下逻辑:

    撕裂图像 md5($file); //其中 $file === 完整的图像路径 图片名称 存储图像 md5(file_get_contents($file)); //自我解释方法:)

    然后

    if (Cache::has($cacheKey_name) && !Cache::has($cacheKey_content)) 缓存::forget($cacheKey_name); 缓存::forget($cacheKey_content);

它会检查图像是否被缓存并且只有内容被改变。如果是,则删除旧缓存并缓存新图像(带有新内容)。使用这种逻辑,您将始终拥有新鲜的图像内容(带有被覆盖的图像)。

或者,您可以随时创建 artisan 任务并创建 Controller 来检查存储目录中的所有缓存数据,然后创建 Cron 任务。

【讨论】:

以上是关于Laravel 4清除所有过期缓存的主要内容,如果未能解决你的问题,请参考以下文章

419 页面使用 laravel sanctum 过期

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

laravel 缓存清除有时不起作用

如何关闭Laravel的缓存

laravel 清理缓存技巧和创建软连接

Laravel 8 无法清除缓存。确保您具有适当的权限