Memcached getDelayed替代实现

时间:2010-06-14 21:25:18

标签: php caching memcached

我想在PHP Memcached扩展上使用getDelayed,但我认为它没有以正确的方式实现。

现在您要求输入一些密钥,然后使用fetch()fetchAll()检索所有密钥。但想象一下我需要检索页面不同部分使用的15个密钥的场景,我事先并不知道,但我可以要求各个对象给我列表。我想要的是给Memcached实例这个列表(每个组件都会给出它的部分),然后当我需要它们从实例中检索时,但不是一次全部检索它们:每个组件都将采用它所需的那个。

基本上,如果我要实现这一点,我会禁止单独使用getDelayed并实施bookGet($keys)方法,您可以将密钥添加到book(实际上调用getDelayed),然后重新定义get处理这三种情况:

  1. 键被预订和检索 - >返回值;
  2. 密钥已预订但未检索 - >去强制获取预订的密钥并返回正确的值;
  3. 未预订钥匙 - >做正常的查找。
  4. 我想知道这是否有意义,您对该主题的想法以及是否有人已经实现了这个或者PECL Memcached已经以这种方式工作,实际上文档没有正确解释它。

1 个答案:

答案 0 :(得分:0)

我认为将它添加到PECL是一个坏主意:get()函数应该直接从memcache中检索,这可能是自你执行的最后一次fetch()/ fetchAll()以来改变了数据。通过扩展用于特定目的的memcached类,可以轻松实现您的功能,这可能不是世界其他人想要的。只需在您的课程中添加一些“预订”和“已检索”密钥的私人商店。重新定义你的get()方法以表现你喜欢的行为(当然也许可以调用parent::get()),你很高兴。

认为我应该能够多次调用getDelayed()并期望它添加额外的密钥来检索而不是覆盖它。 (因此$m->getDelayed(array('foo');后跟$m->getDelayed(array('bar');会导致这两个键的fetchAll(),而不仅仅是最后一个'bar'。

相关问题