2012-02-22 3 views
3

У меня очень тяжелое определение класса, которое зависит от MySQL (то есть иногда может быть медленным).Использование Memcache в PHP с OOP

Я успешно установил и начал использовать библиотеку Memcache в PHP. Это позволяет мне хранить целые объекты без повторного запроса.

Однако я расширил свой класс, чтобы автоматически обновлять базу данных любых изменений. Я использую __get и __set для отслеживания изменений, а затем обновить на __destruct

То, что я не могу понять, как проверить, является ли __destruct вызывается, когда Memcache удаляет объект.

Кто-нибудь знает по факту/имеет предложение о том, как его проверить?

+1

Я сомневаюсь, что Memcached выполняет что-либо, когда он выбрасывает кешированные данные. Memcached не является специфичной для PHP, и он хранит только * данные *. – deceze

+1

Ммм. Я не думаю, что деструктор объекта вызывается вообще, когда Memcache удаляет объект ... потому что он будет удален Memcache, а не PHP –

+1

Memcache не имеет ничего общего с методом деструктора. –

ответ

3

Нет, memcache не разрушит объект. Вы постоянно являетесь объектом __sleep() 'ing и __wakeup()' ing. Но поскольку PHP не тот, кто уничтожает или теряет объект, деструктор никогда не вызывается. Есть вероятность того, что ваша библиотека кеширования удалит объект из memcache после истечения срока его действия и уничтожит объект, вызывая __destruct() .. но это будет зависеть от реализации.

+0

Memcache вызывает сериализацию? – Mikhail

+1

@Mikhail Большинство кеширующих движков - это только ключи => ценности. Он не может хранить объект .. просто простые типы данных, такие как int и строки. Таким образом, ваш объект преобразуется в строку через 'serialize()' и 'unserialize()'. Когда это происходит, PHP вызывает магические методы '__sleep()' и '__wakeup()' в случае, если что-то особенное должно произойти при выполнении этих операций. Посмотрите на страницу состояния memcache, чтобы посмотреть, что в настоящее время находится в памяти, и вы увидите строковое представление ваших объектов. –

+0

О, черт возьми, я думал, что это сохраняет реальный кусок памяти. Я могу сэкономить время на __wakeup(), но, возможно, не на __sleep – Mikhail

Смежные вопросы