【问题标题】:Can't get memcache to return value无法让内存缓存返回值
【发布时间】:2009-04-09 22:34:30
【问题描述】:

我已经使用了一些我以前使用过的内存缓存脚本,但在新页面上,我没有得到任何响应。

memcache 位于另一个页面中包含的函数中。 我所做的是将 md5 散列到 mysql 查询并将其存储为 memcached 数据的键。如果密钥不在 memcache 中,那么我会创建数据,将其放入 memcache 并返回。

我认为代码相当简单。这是重要的部分(这是一个创建输出的大页面,所以你不需要所有这些,尽管我认为“返回”很重要,因为我担心这可能是我搞砸的地方。

我用

调用函数
$outList.= outData($getList);   

$getList 是一个 mysql 查询

$outList 函数是

<?php

@$memcache = new Memcache;
@$memcache->connect("localhost",11211);

function outData($getList)
{
    $memVal = @$memcache->get(MD5($getList));
    if($memVal=='')
    {
        $results=mysql_query($getList)or die(mysql_error());

        // then I do a bunch of stuff with the data
        @$memcache->set(MD5($getList), $memVal, false, 60000);
    } 
    return $memVal;
}

我可以显示创建 $memVal 的所有内容,但我怀疑错误在 if 行中,但在另一个页面上使用相同的代码没有问题。

这看起来有什么问题吗?

【问题讨论】:

  • 如果您在调试时删除 @ 会很有帮助.....
  • 这也是为什么我运行我的开发环境时会显示最严格的错误和警告。我想看看 PHP 发现的关于代码的所有内容,甚至有点不正确。警告是一个稍后会回来咬你的错误。

标签: php memcached


【解决方案1】:

由于所有这些 @ 的抑制错误,没有办法知道什么是失败的。

我运行了它 - 没有 @'s 并且答案立即弹出 - 就行了:

$memVal = @$memcache->get(MD5($getList));
#Notice: Undefined variable: memcache in /home/topbit/736160.php on line 9

它从哪里得到变量 $memcache ?它没有传递到函数中。

【讨论】:

  • 对不起,我用@来测试memcache何时失败或没有连接。当然,我应该知道这抑制了我应该看到的错误。我的坏:(
【解决方案2】:

问题在于范围。在函数中,全局范围内的变量不会自动传递,您必须将它们作为参数添加到函数中。

function outData($memcache, $getList)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2017-07-27
    相关资源
    最近更新 更多