Laravel 4清除所有过期的缓存

5

在 Laravel 中,我们可以使用以下方式存储缓存:

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

然而即使过期了,这将导致越来越多的缓存文件被存储。如果我们尝试使用 php artisan cache:clear 或者 Cache::flush(); 清理它,它将抹掉所有包括仍然有效的缓存。

是否有可能自动清理只清除已过期的缓存?谢谢。


你应该考虑使用像memcached或redis这样的东西。 - ceejayoz
为什么不让它过期呢?文件之后会被删除。 - awei
2个回答

0
$value = Cache::remember('users', function()
{
    return DB::table('users')->get();
});

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

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

  1. 存储图像的md5($file);//其中$file === 带有图像名称的完整图像路径
  2. 存储图像的md5(file_get_contents($file));//自我解释的方法 :)
  3. 然后

    if (Cache::has($cacheKey_name) && !Cache::has($cacheKey_content)) { Cache::forget($cacheKey_name); Cache::forget($cacheKey_content); }

它将检查图像是否已缓存且仅内容更改。如果是,则删除旧缓存并缓存新图像(带有新内容)。通过这种逻辑,您将始终拥有新鲜的图像内容(覆盖图像)。

或者,您可以始终创建工匠任务并创建控制器来检查存储目录中的所有缓存数据,然后创建Cron任务。


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());

要使用此功能,您可以查看它 使用PHP删除空子文件夹


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接