1

我在使用 Memcached 时遇到了一些麻烦。

我在下面有这段代码:

if(!$Z->get('user')) {
    $Z->set('user', $hs->load_hs_main($_GET['from'], $_GET['table']));
}

$je = $Z->get('user') ? $Z->get('user') : $hs->load_hs_main($_GET['from'], $_GET['table']);

什么$Z->get('user')$je应该是一个 MySQLi 结果对象。这会产生奇怪的效果,例如 print_r 不起作用,而且看起来不正确。

我想检查 memcached 创建的对象是否存在,如果存在则使用它。但如果不存在,请设置它。

4

2 回答 2

3

从缓存中获取项目或从其他地方创建/加载它(如果它不存在)的正确方法是:

$user = $Z->get('user'); // get it from cache, returns falsy value if not found
if(!$user) { // not found
    $user = $hs->load_hs_main(...); // load the element from somewhere else
    $Z->set('user', $user); // cache it
}
// here $user always exists
于 2012-07-01T10:56:31.080 回答
1

一般来说,您不能在内存缓存中存储“内部”类的对象。这些对象包含无法序列化的数据。您必须从结果对象中获取数据并将其存储在 PHP 数组中。然后您可以将该数组存储在 memcache 中。

于 2012-07-01T11:02:07.020 回答