ksamborski/apcu-memo

0.4 2016-10-18 14:07 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:25:50 UTC


README

#apcumemo 基于参数的缓存函数结果的 PHP 库。

需求

您需要为 php >= 7.0.0 安装 acpu 扩展

安装

composer require ksamborski/apcu-memo

基本用法

功能范式教导我们,纯函数是最佳选择。它们提供两个主要特性

  • 因为它们的结果仅依赖于它们的参数,所以它们很容易测试(您不需要任何模拟或存根)
  • 因为它们没有副作用,所以它们很容易缓存

考虑这个例子

use APCuMemo\APCuMemo;

function sumrange($a, $b)
{
    return APCuMemo::memoize(
        function(...$_) use ($a, $b) {
            return array_reduce(range($a, $b), function ($product, $item) { return $product + $item; }, 1);
        },
        [ 'ttl' => 5 ],
        "sumrange",
        $a,
        $b
    );
}

$start = microtime(true);
echo sumrange((int) $_GET['a'], (int) $_GET['b']);
$elapsed = microtime(true) - $start;
echo " " . ($elapsed * 1000) . " ms";

我们有一个简单的函数,它从 $a 到 $b 求整数之和。这可能需要一些时间,但当我们第一次计算它时,我们可以将其缓存。注意 'ttl' 参数。它设置为 5 秒,这意味着如果在 5 秒内没有人要求相同的范围,它将忘记结果。但每次请求缓存值都会重置 ttl。这样我们就可以在缓存中只保留最常用的值。

让我们看看它是如何工作的。对于 $a = 1 和 $b = 1831233,它将返回类似以下内容

1676708065762 283.94412994385 ms

随后的请求将返回

1676708065762 0.030040740966797 ms