使用Memcache缓存PHP类

时间:2012-02-22 06:47:51

标签: php memcached

我正在将memcache添加到我的网站中,而我遇到的问题是我正在缓存该对象,因此很容易在其他对象或页面中使用。问题是我在加载对象时缓存了对象,因此如果我对对象中的变量进行了更改,则不会将其传递给其他页面。我是否遗漏了某些东西,或者我是否真的需要在所有处理后保存缓存的对象?

// ON THE PAGE I FIRST CALL
$objState = $gb->objCache->State('1');
echo "Name:" . $objState->get_Name() . "<br>";
$objState->set_Name('New Name');

// ON ANOTHER PAGE I CALL IT AGAIN
$objState = $gb->objCache->State('1');
echo "Name:" . $objState->get_Name() . "<br>";
$objState->set_Name('New Name 2');

// THE FUNCTION THAT I CALL TO GET THE STATE CLASS/OBJECT
function State($id, $reload=false) {
  $objState = null;

  $cached = false;
  if (is_object($this->gb->memcache))
    $cached = $this->gb->memcache->get('objState_' . $id . '_' .  getCompanyUniqueID());
  if ($cached !== FALSE && is_object($cached) && !$reload) {
    $objState = $cached;
  } else    {               
        $objState = new State($id);

      // Store generated XML for 5 minutes (300 seconds)
    if (is_object($this->gb->memcache))
        $this->gb->memcache->set('objState_' . $id . '_' .  getCompanyUniqueID(), $objState, 0, 300); // Don't worry about third argument, it controls compression
    }

  return $objState;
}

1 个答案:

答案 0 :(得分:3)

Memcached将数据存储为序列化实体,因此需要提交任何更改。当脚本使用PHP register_shutdown函数完成执行时,您可以尝试编写一个对象来提交数据。