首页 > 解决方案 > 为什么不能只序列化第一次“闭包”?

问题描述

错误是:

不允许序列化“闭包”

错误:

.../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应用的索引页面。(代码相同)

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

标签: laravelcachingredisclosures

解决方案


如果缓存中存在数据,我通过手动存储和返回数据来修复它(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);
}

推荐阅读