Laravel 4 Cache:: запомнить никогда не возвращает ответ с указанным идентификатором
Я использую Laravel 4 вместе с коннектором PHP Shopify. Я пытаюсь ограничить количество обращений к продуктам Shopify, кэшируя отдельные страницы продуктов, когда они нужны в первый раз.
Я сделал следующий простой маршрут в Laravel, чтобы проверить этот поток:
Route::get('product/{id}', function($id)
{
$value = Cache::remember($id, 10, function() use ($id)
{
echo('Getting this from Shopify');
$shopify = new ShopifyLib;
return $shopify->getShopifyProduct($id);
});
var_dump($value);
});
ShopifyLib - это PHP-библиотека, которую я написал для связи с соединителем Shopify. Вызов всегда возвращает страницу продукта в формате JSON. Проблема заключается в том, что вызов всегда выполняется извне Shopify, а не извлекается из кеша.
Я использую кэширование базы данных с сохранением следующей записи:
key : laravel172989477
value : eyJpdiI6Imw4aUwzNHN4eExwdElPWFZKXC9hdFpVRjc4ZG5pK1dYMTlJVm44a1doKzlvPSIsInZhbHVlIjoieVJ6N2J6Q1A3SGNsWG1xWFJKTUdVak5FSEtHWDZKQkd2Y2x0ZEI2dHlvcz0iLCJtYWMiOiJhNWU0OGUxOTkyNWE2NTRhNTY1ZTNhMjRlOWNhNzRjNGI1ZDIyY2YzNGM3NTVjOThhMDUyYjllZmI1OTJiZmE1In0=
expiration : 1386616552
$ Id никогда не меняется, поэтому я предполагаю, что эта запись должна возвращаться каждый раз.
Я попробовал более простой пример, используя:
Route::get('product/{id}', function($id)
{
$value = Cache::remember('test', 5, function()
{
echo('Not getting this from the cache!');
return 'example';
});
var_dump($value);
});
Это сработало, как и ожидалось, только при вызове не кеша все будущие вызовы поступали в кеш.
1 ответ
Оказывается, что ответ, возвращающийся из Shopify, на самом деле не был JSON, как я изначально подозревал. По-видимому, это был массив. Благодаря JSON-кодированию ответа кеш работает как положено.
Route::get('product/{id}', function($id)
{
$value = Cache::remember("product_$id", 10, function() use ($id)
{
echo('Getting this from Shopify');
$shopify = new ShopifyLib;
return json_encode($shopify->getShopifyProduct($id));
});
var_dump(json_decode($value));
});