Memcached getDelayed альтернативная реализация - PullRequest
0 голосов
/ 15 июня 2010

Я хотел бы использовать getDelayed в расширении PHP Memcached, но я думаю, что оно неправильно реализовано.

Прямо сейчас вы запрашиваете некоторые ключи, а затем получаете все их с помощью fetch() и fetchAll(). Но представьте себе сценарий, в котором мне нужно получить 15 ключей, используемых в разных частях страницы, которые я не знаю заранее, но я могу попросить различные объекты дать мне список. Что я хочу, так это дать экземпляру Memcached этот список (каждый компонент отдает свою часть), а затем позже, когда мне нужно, чтобы они извлекались из экземпляра, но не все из них сразу: каждый компонент получал тот, который ему нужен.

В принципе, если бы я реализовал это, я бы запретил использовать только getDelayed и реализовал бы метод bookGet($keys), в котором вы бы добавили ключи к книге (который на самом деле вызывает getDelayed) и переопределил get для обработки три случая:

  1. ключ зарегистрирован и извлечен -> вернуть значение;
  2. ключ забронирован, но не восстановлен -> пойти и принудительно извлечь забронированные ключи и вернуть правильное значение;
  3. ключ не забронирован -> сделать обычный поиск.

Я хочу знать, имеет ли это смысл, ваши мысли по этому вопросу и если кто-то уже реализовал это или, возможно, PECL Memcached уже работает таким образом, и на самом деле документация не объясняет это правильно.

1 Ответ

0 голосов
/ 16 июня 2010

Я думаю, это плохая идея добавить его в PECL следующим образом: функция get () должна извлекать данные непосредственно из memcache, который, возможно, изменил данные с момента последнего выполнения fetch () / fetchAll ().Ваша функциональность будет легко реализована путем расширения класса memcached для ваших определенных целей, что может не соответствовать желанию остального мира.Просто добавьте в свой класс несколько частных хранилищ «забронированных» и «уже полученных» ключей и переопределите метод get (), чтобы он вел себя так, как вам нравится (и, возможно,, конечно, вызовите parent::get()), и все готово.1004 *

Я делаю думаю, что я должен иметь возможность вызывать getDelayed () более одного раза и ожидать, что он добавит дополнительные ключи для извлечения вместо перезаписи.(таким образом, $m->getDelayed(array('foo');, за которым следует $m->getDelayed(array('bar');, приведет к fetchAll() обеих этих клавиш, а не только к последнему «бару».

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