最近想了一下在PHP应用中如何使用getDelayedgetMulti,以及它们的区别。

通过阅读有关 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 发生在 getDelayedfetchAll 上。
getDelayed 基本上是说“我想要这些 key ,但我现在不需要它们”。

这样做的主要好处是它允许 PHP 作为并行操作在后台执行此操作。如果您知道稍后在流程中需要哪些 key ,您可以让 PHP 去获取它们,当您确实需要它们时,您可以调用 fetchAll

如果 PHP 在执行其他操作时设法获取了数据,则当您调用 fetchAll 时,无需等待。如果没有,进程会在来自 Memcached 的数据完成传输时暂停。

一个非常愚蠢的例子是,如果你有两件事要做:

  • 调整需要 3 秒的图像大小。
  • 从内存缓存中获取 100 个值,耗时 2 秒。

  • 如果您只是调整图像大小然后使用 getMulti ,则需要 5 秒。

    如果您为您的 key 调用 getDelayed ,然后调整图像大小,然后使用 fetchAll ,则整个过程只需 3 秒。

    关于PHP memcached : getDelayed & getMulti - how to use?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2929054/

    10-11 21:16