Laravel 4 Cache::记住永远不会返回具有给定ID的响应


Laravel 4 Cache::remember is never returning a response with a given ID

我将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);
});

这正如预期的那样,只调用了一次非缓存,将来的所有调用都将转到缓存。

事实证明,从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));
});