odan/cache

此包已被放弃,不再维护。作者建议使用 symfony/cache 包。

PSR-16 Simple Cache 接口的 PHP OpCache 实现

0.5.0 2020-12-15 09:00 UTC

This package is auto-updated.

Last update: 2023-11-13 20:03:26 UTC


README

PSR-16 简单缓存实现。

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

即开即用的字节码缓存

PHP 是一种解释型语言。默认的 PHP 运行时将 PHP 源代码编译为称为 PHP 字节码的中间表示形式,然后执行。字节码缓存将此编译后的 PHP 源代码表示存储在共享内存中。这消除了在每个请求中加载和编译源代码的需要,从而显著提高了性能(每秒请求量增加多达 70%)。

执行 PHP 脚本的基本思想分为两步

  • 第一步:将用纯文本编写的 PHP 代码 编译为操作码
  • 第二步:执行那些 操作码

当您有一个 PHP 脚本时,只要它没有被修改,操作码总是相同的;因此,每次执行该脚本时都进行编译阶段是一种浪费 CPU 时间。

为了防止这种重复编译,有一些操作码缓存机制可供使用。

一旦 PHP 脚本被编译为操作码,那些操作码将保存在 RAM 中,并且在下一次执行脚本时直接从内存中使用;从而防止了重复编译。

阅读更多

要求

  • PHP 7.2+ 或 8.0+

安装

composer require odan/cache

用法

$cachePath = sys_get_temp_dir() . '/cache';

$cache = new \Odan\Cache\Simple\OpCache($cachePath);

// set a opcache value
$cache->set('foo', 'bar');

// get a opcache value
echo $cache->get('foo'); // bar

已知问题

致命错误:调用未定义的方法 stdClass::__set_state()

如果值中包含对象,它们将被写入为 stdClass::__set_state()。这对于可以添加 __set_state() 的对象来说是正常的,但不能添加到 stdClass

要修复此问题,请序列化您要尝试缓存的值

$cache->set('key', serialize($object));

然后将字符串反序列化为原始值

$object = unserialize($cache->get('key'));

竞争条件

如果您处于高并发环境,应避免使用文件系统缓存。在 PHP 中,对文件系统的多次操作很难使其原子化。

类似组件