最近想了一下在PHP应用中如何使用getDelayed
和getMulti
,以及它们的区别。
通过阅读有关 getDelayed 的文档:
显然,与 getMulti
不同,在获得可用 key 之前需要调用 fetchAll 。但是实际的 memcached 调用何时完成?
在 fetchAll
还是在 getDelayed
运行时?
更新示例:
$this->memcached->set('int', 99);
$this->memcached->set('string', 'a simple string');
$this->memcached->set('array', array(11, 12));
$this->memcached->getDelayed(array('int'));
$this->memcached->getDelayed(array('string'));
$this->memcached->getDelayed(array('array'));
print("<pre>".print_r( $this->memcached->fetchAll() )."</pre>"); // returns the array element only.
最佳答案
Memcache IO 发生在 getDelayed
或 fetchAll
上。getDelayed
基本上是说“我想要这些 key ,但我现在不需要它们”。
这样做的主要好处是它允许 PHP 作为并行操作在后台执行此操作。如果您知道稍后在流程中需要哪些 key ,您可以让 PHP 去获取它们,当您确实需要它们时,您可以调用 fetchAll
。
如果 PHP 在执行其他操作时设法获取了数据,则当您调用 fetchAll
时,无需等待。如果没有,进程会在来自 Memcached 的数据完成传输时暂停。
一个非常愚蠢的例子是,如果你有两件事要做:
如果您只是调整图像大小然后使用
getMulti
,则需要 5 秒。如果您为您的 key 调用
getDelayed
,然后调整图像大小,然后使用 fetchAll
,则整个过程只需 3 秒。关于PHP memcached : getDelayed & getMulti - how to use?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2929054/