php - Laravel 4 Cache::remember 永远不会返回具有给定 ID 的响应

标签 php caching laravel-4 shopify database-caching

我将 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 是我编写的用于与 Shopify 连接器通信的 PHP 库。该调用每次都正确返回 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);
});

这按预期工作,只调用非缓存一次,所有 future 调用都转到缓存。

最佳答案

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

关于php - Laravel 4 Cache::remember 永远不会返回具有给定 ID 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20478858/

相关文章:

php - 如何使用 Laravel IoC 将数据库注入(inject)构造函数

Php如何删除最后一个逗号

php - 在 mysql 表上使用空间索引选择最近的地理坐标不起作用

php - 如何阻止用户使用 PHP 或 mod rewrite 查看我网站上没有索引页面但其他页面的文件夹?

c# - 如何访问我只需要在 Application.Start 上创建一次的变量

database - General/Phalcon - ACL 和数据库存储

caching - Composer 从缓存而不是存储库中克隆

php - 验证器 - 返回所有错误消息

unit-testing - Laravel Eloquent 模型在单元测试期间重置引导属性

Laravel 应用程序语言改变?