Laravel 5.4-缓存阵列
我试图缓存一个数组,但由于某些原因,没有添加任何内容。代码如下:Laravel 5.4-缓存阵列,laravel,laravel-5,laravel-5.4,Laravel,Laravel 5,Laravel 5.4,我试图缓存一个数组,但由于某些原因,没有添加任何内容。代码如下: public static function getEmployees() { if(!Cache::has('employees')): $data = ['urlPath' => '/employees/directory']; $params = ['fields' => 'jobTitle'];
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');
}
当我试图获取缓存值(数组)时,我得到的是空值:
dd(Cache::get('employees'));
这是我要存储的一个数组:
array:2 [▼
"fields" => array:16 [▶]
"employees" => array:257 [▶]
]
(我使用db存储)您使用的putMany()
错误。我打赌只要使用常规的put()
,就足够了:
但是,如果您想要putMany()
,则需要首先准备源数组,而您没有这样做:
$data = [
'fields' => whateverItComesFrom(),
'employees' => API::callAPI('GET', $data, $params),
];
Cache::putMany($data, 1440);
编辑
正如其他用户在评论中提到的,除了不正确的使用之外,DB存储也可能导致问题,因为根据您要缓存的数据的大小,它可能只是超出了数据库类型限制,即。
BLOB
仅为65535字节(64KB)(这在大多数情况下足够了,但数组中有200多个条目…)MEDIUMBLOB
为16777215字节(16 MB),而LONGBLOB
为4294967295字节(4 GB),因此可能也需要检查该方面,并在需要时更改列类型。我发现了问题-文本字段的限制是缓存无法工作的原因。将类型更改为LONGBLOB(感谢num8er的建议),现在它可以工作了。我尝试了这个,但仍然得到null(并且没有任何内容存储到db中)。请确保从callAPI()
@timliews-I set CACHE\u DRIVER=数据库中获取任何数据。我刚刚尝试将文件作为存储,这是可行的。可能数组对于文本字段来说太大了?@num8er-文本限制导致了问题。@Sasha change field typeALTER TABLE cacheTable MODIFY fieldName LONGBLOB
$data = [
'fields' => whateverItComesFrom(),
'employees' => API::callAPI('GET', $data, $params),
];
Cache::putMany($data, 1440);