zheltikov / php-memoize
2.1.3
2021-10-04 15:12 UTC
Requires
- php: >=7.4
- zheltikov/php-invariant: ^1.0
Requires (Dev)
Suggests
- zheltikov/php-memoize-redis: An inter-process cache backed by Redis.
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中的进程间缓存