【问题标题】:Laravel 5.4 - Cache an arrayLaravel 5.4 - 缓存一个数组
【发布时间】:2017-09-04 06:56:53
【问题描述】:

我正在尝试缓存一个数组,但由于某种原因,没有添加任何内容。这是代码:

public static function getEmployees()
    {

        if(!Cache::has('employees')):

            $data      = ['urlPath' => '/employees/directory'];

            $params    = ['fields' => 'jobTitle'];

            $employees = API::callAPI('GET', $data, $params);

            Cache::putMany($employees, 1440);

        endif;

        return Cache::get('employees');

    }

我尝试获取缓存值(数组),却得到了 null:

dd(Cache::get('employees'));

这是我要存储的数组:

array:2 [▼
  "fields" => array:16 [▶]
  "employees" => array:257 [▶]
]

(我用db来存储)

【问题讨论】:

    标签: laravel laravel-5 laravel-5.4


    【解决方案1】:

    你用错了putMany()。我敢打赌你只需要使用普通的put()就足够了:

    Cache::put('employees', $employees, 1440);
    

    但是如果你想要putMany(),那么你需要先准备源数组,你没有这样做:

    $data = [
        'fields' => whateverItComesFrom(),
        'employees' => API::callAPI('GET', $data, $params),
    ];
    Cache::putMany($data, 1440);
    

    编辑

    正如 cmets 中提到的其他用户一样,除了使用不正确之外,数据库存储也可能导致该问题,因为根据您要缓存的数据大小,它可能只是超出数据库类型限制,即 BLOB 只是 65535 字节 (64KB)(这对于大多数情况来说已经足够了,但是数组中有 200 多个条目......)。 MEDIUMBLOB 是 16777215 字节 (16 MB),LONGBLOB 是 4294967295 字节 (4 GB),因此也值得检查这方面并在需要时更改列类型。

    【讨论】:

    • 我试过了,但我仍然为空(并且没有任何内容存储到数据库中)。
    • 确保您从callAPI()获取任何数据
    • @TimLewis - 我设置了 CACHE_DRIVER=database。我刚刚尝试将文件作为存储,这正在工作。也许数组对于文本字段来说太大了?
    • @num8er - 文本限制导致了问题。
    • @Sasha 更改字段类型ALTER TABLE cacheTable MODIFY fieldName LONGBLOB
    【解决方案2】:

    我发现了问题 - 文本字段的限制是缓存不起作用的原因。将类型更改为 LONGBLOB(感谢 num8er 的建议),现在它可以工作了。

    【讨论】:

      猜你喜欢
      • 2021-02-27
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 2018-04-14
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多