0

我遇到了 Memcache 无法设置密钥的问题。基本上我有我的测试页面:

$db=new db;
$my_test_cache=$db->query("SELECT `txt` FROM `lang` WHERE `pg`='front' LIMIT 2", 10);

还有一个用于缓存的 db 类:

class db {
        public function query($query, $ttl=30, $cache=true, $compr=false) {
            global $memcache;
            if ($cache==true) {
                $res=$memcache->get(hash('md4', $query));
                if ($res!=false) {
                    echo 'this is cached';
                    return $res;
                }
                else {
                    $res=mysql_query($query);
                    $memcache->set(hash('md4', $query), $res, $compr, $ttl);
                    echo 'this is not cached<hr>
                    Query: ',$query,'<br/>
                    Md4: ',hash('md4',$query),'<br/>';
                    var_dump($res);
                    return $res;
                }
            }
            else return mysql_query($query);
            unset($res, $query);
        }
    }

可悲的是,即使所有资源似乎都正常工作,这也不会设置任何要缓存的数据。又名我的页面输出:

  • 这不是缓存查询:SELECT * FROM langWHERE pg='front' LIMIT 2
  • Md4: 34aa4e46a15413f5091dac79c9e86306
  • 类型的资源(7)(mysql结果)

有人会这么好心地告诉我在这里做什么吗?

4

1 回答 1

1

错字:

        if ($cache=true) {
                  ^--- should be ==

同样,除非 memcache 比我想象的要聪明得多,否则您只是在缓存查询结果句柄,而不是实际的查询结果:

       $memcache->set(hash('md4', $query), $res, $compr, $ttl);
                                           ^^^^

那时, $res 只是一个随机数,而不是txt您请求的字段。您必须首先从该结果中提取一行才能检索数据:

       $result = mysql_query(...) or die(mysql_error());
       $row = mysql_fetch_assoc($result);
       $txt = $row['txt'];
于 2012-04-28T15:32:38.230 回答