zheltikov/php-memoize

2.1.3 2021-10-04 15:12 UTC

This package is auto-updated.

Last update: 2024-08-29 05:13:19 UTC


README

这是一个用于简单缓存可调用对象的PHP库。

安装

这是一个composer包,因此您可以通过以下方式安装:

$ composer require zheltikov/php-memoize

用法

要将缓存应用于一个可调用对象,只需调用wrap函数以获取一个新的包装版本。例如

<?php

require_once(__DIR__ . '/../vendor/autoload.php');

use function Zheltikov\Memoize\wrap;

function my_expensive_function(string $who): string
{
    // Just for illustrative purposes we just sleep here,
    // but here could be a database fetch, or an expensive
    // computation.
    sleep(5);
    return 'Hello ' . $who . '!';
}

my_expensive_function('World'); // Runs in 5 seconds

$memoized = wrap('my_expensive_function');

$memoized('World'); // 5 seconds
$memoized('World'); // milliseconds

$memoized('Everyone'); // 5 seconds
$memoized('Everyone'); // milliseconds

如您所见,缓存的函数仅对给定输入执行一次计算,然后将结果缓存以供后续相同的输入调用。

内部(默认情况下),缓存的函数会序列化和哈希输入参数。默认情况下,它使用md5算法进行哈希。在大多数情况下,md5算法足够使用,但如果您的缓存变得很大,使用它可能会导致哈希冲突。因此,您可以配置用于缓存函数的哈希算法。

此配置如下所示

<?php

require_once(__DIR__ . '/../vendor/autoload.php');

use Zheltikov\Memoize\{Config, DefaultKeyGenerator};
use function Zheltikov\Memoize\wrap;

// You can change the hashing algorithm for a specific function like so:
$wrapped = wrap(function () { /* ... */ });
$wrapped->getKeyGenerator()->setHashAlgo('whirlpool');

// Or you can change it for all previously created functions:
Config::setKeyGenerators(
    (new DefaultKeyGenerator())
        ->setHashAlgo('sha256')
);

待办事项

  • 包装函数
  • 可配置的缓存哈希算法
  • 类方法缓存辅助函数
  • 具有LSB(延迟静态绑定)的类方法缓存辅助函数
  • 可配置的缓存序列化算法
  • 可配置的TTL(生存时间)功能
  • 实例缓存特性
  • 静态缓存特性
  • 函数包装器接口
  • 重置所有或特定缓存
  • Redis中的进程间缓存。请参阅:https://github.com/zheltikov/php-memoize-redis
  • MySQL/MariaDB中的进程间缓存