Кэширование PHP классов с помощью Memcache - PullRequest
1 голос
/ 22 февраля 2012

Я добавляю 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 Ответ

3 голосов
/ 22 февраля 2012

Memcached хранит данные как сериализованный объект, поэтому любые изменения необходимо будет зафиксировать.Вы можете попробовать написать объект для фиксации ваших данных, когда скрипт завершит выполнение с помощью функции PHP register_shutdown.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...