为什么不能仅序列化“ closure”?

时间:2019-11-22 11:27:00

标签: laravel caching redis closures

错误是:

  

不允许对“关闭”进行序列化

错误:

  

... / vendor / laravel / framework / src / Illuminate / Cache / RedisStore.php:295

第一次永久记住Cache时抛出。 第二次尝试后(重新加载浏览器时),它应能正常工作。

public function cache() 
{
    $task = $this;

    return Cache::rememberForever('apply:' . $task->apply->slug . ':' . $task->slug, function () use ($task) {
        return $task;
    });
}

有趣的部分是这个。因此,它适用于在Apply的索引页面上缓存$apply。 (代码相同)

注意:此问题与Redis直接相关。请不要提及有关序列化的旧问题。您也可以查看Laravel 6.x官方文档。与此相关的所有内容均已添加:https://laravel.com/docs/6.x/cache#retrieving-items-from-the-cache

1 个答案:

答案 0 :(得分:0)

我通过手动存储和返回数据(如果数据存在于缓存中)来修复它(rememberForever()应该如何工作)。

public function cache () {

    $slug = 'task:'.$this->slug;

    if(Cache::has($slug)) return Cache::get($slug);

    if(!Cache::put($slug, $this)) throw new ProtocolException(1045);

    return Cache::get($slug);
}