mimatus / export-cache
PSR-6 缓存,使用 OPcache 加速反序列化
dev-master
2023-08-05 18:29 UTC
Requires
- php: >=8.2
- brick/varexporter: ^0.3.8
- psr/simple-cache: ^2.0|^3.0
Requires (Dev)
- cache/integration-tests: dev-master
- phpbench/phpbench: ^1.2.14
- phpstan/phpstan: ^1.10.26
- phpunit/phpunit: ^10.2.6
- slevomat/coding-standard: ^8.13.1
Provides
- psr/simple-cache-implementation: 2.0|3.0
This package is not auto-updated.
Last update: 2024-09-15 20:53:23 UTC
README
PSR-6 缓存,使用 OPcache 加速反序列化
此缓存包旨在针对小众使用场景,在这些场景中,存储数据的反序列化可能会对性能产生重大影响,并且缓存中存储的数据很少更新(或从未更新,主要是因为写入性能)。
🛠 安装
composer require mimatus/export-cache
强烈建议启用 OPcache 以获得最佳性能
使用
在以下情况下使用...
- OPcache已启用
- 缓存数据很少更改(过于频繁的更改可能会导致 OPcache 内存定期重置)
- 需要 PHP 进程间共享的缓存
以下情况下不要使用...
- 基本上在使用时...部分之外的所有其他使用场景 😅
示例
use MiMatus\ExportCache\ExportCache; $storagePath = sys_get_temp_dir() . \DIRECTORY_SEPARATOR . 'export-cache'; $cache = new ExportCache($storagePath); $closure = function () { return 'data' }; $cache->set('key0', 'data', new DateInterval('P1D')); $cache->set('key1', ['data']); $cache->set('key2', $closure); $cache->set('key3', 'expired data', new DateInterval('P1S')); sleep(2); assert($cache->get('key0') === 'data'); assert($cache->get('key1') === ['data']); assert($cache->get('key2')() === 'data'); assert($cache->get('key3') === null);
数据限制
感谢brick/varexporter,它用于数据序列化,可以缓存几乎任何 PHP 值,包括闭包,但有一些限制
- PHP 内部对象 - SplFileInfo, XMLReader, 等。
- 具有循环引用的对象
- 匿名类
- eval()'d 或同一行声明的闭包,更多信息
并发
- 脏读
- 丢失更新
- 幻读
- 不可重复读取 - WIP
性能 - WIP
要查看完整结果,请使用
make build make benchmark
需要:docker
💌 致谢
- 序列化 - brick/varexporter