0

这一直让我发疯,问题是我无法解决如何获取和设置要在我的视图中显示的缓存数据。

public function get_something($id, $account_name)
{
    $sql = "SELECT one,two,three FROM table WHERE id = ? and account_name = ? ";
    $key = md5("SELECT one,two,three FROM table WHERE id = $id and account_name = $account_name ");

    $get_result = $this->Core->Core->Memcache->get($key);

    if($get_result)
    {
      // How would I set the Data
    }
    else
    {
     $stmt = $this->Core->Database->prepare($sql);
     $stmt->bind_param("is", $id, $account_name);
     $stmt->execute();
     $stmt->store_result();
     $stmt->bind_result($one, $two, $three);
     $stmt->fetch();
     //Below is how i set the data
     $this->Core->Template->set_data('one', $one);  
     //Set the Memcache
     $this->Core->Memcache->set($key, $stmt, TRUE, 20);
}

所以我的问题是如何从 memcache 中的准备好的语句获取和设置数据?

4

1 回答 1

0

Memcache 是一个 key/value 存储系统,key 和 value 都需要序列化。从php.net页面:

请记住,资源变量(即文件和连接描述符)不能存储在缓存中,因为它们不能在序列化状态下充分表示。

看来您的 sql 语句正在单行中查找三个值。我不是 mysqli 方面的专家,但这是您想要做的事情:

public function get_something($id, $account_name){
  $sql = "SELECT one,two,three FROM table WHERE id = ? and account_name = ? ";
  $key = md5("SELECT one,two,three FROM table WHERE id = $id and account_name = $account_name ");

  $get_result = $this->Core->Core->Memcache->get($key);

  if($get_result){
    return $get_result;//#1 just return it, the format is an array like what is being built below
  }
  else{
   $stmt = $this->Core->Database->prepare($sql);
   $stmt->bind_param("is", $id, $account_name);
   $stmt->execute();
   $stmt->store_result();
   $stmt->bind_result($one, $two, $three);
   $stmt->fetch();
   //Below is how i set the data
   $this->Core->Template->set_data('one', $one);//#2 I don't know what this line does or is for, presumably for something else besides memcache stuff, maybe it acts like return
   //Set the Memcache
   $array=array();//#3
   $array[]=$one;
   $array[]=$two;
   $array[]=$three;

   $this->Core->Memcache->set($key, $array, TRUE, 20);
   //this is a function, do you want to return your values somewhere?
 }

一些注意事项,#1 你的问题的答案很简单,只需 return $get_result。它应该是一个包含三个值的数组。#2 我不熟悉这条线,也不熟悉它的作用。这是您将值“返回”给控制器的方式吗? 如果是这样,你会想模仿我把#3放在return里面的那条线,这是你的问题。if您不能将$stmt变量保存在 memcache 中,它是一个 mysqli 对象,而不是您想要的数据。您需要构建一个数组,然后保存该数组。那应该为你做。

还有其他细微差别要做,您可以循环返回值。你应该检查 mysql 没有返回任何东西。但这是实现这一目标的基本起点。

让我知道这是否适合您。

于 2013-02-06T00:09:58.113 回答