mimatus/export-cache

PSR-6 缓存,使用 OPcache 加速反序列化

dev-master 2023-08-05 18:29 UTC

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

💌 致谢

类似项目