clvarley/cache

非常简单的面向对象缓存抽象层

v1.1.0 2021-08-31 13:27 UTC

README

Release PHP Version Composer Version Build Status

一组非常简单的缓存工具。

内容

要求

  • PHP >= 7.3
  • Composer

关于

概述

在编写大型Web应用程序时,缓存计算密集型数据以增加性能和减少对可能较慢的存储设备的调用(API请求、数据库、文件系统等)通常很有用。

此库是一组简单工具,旨在使在PHP中序列化和缓存数据变得尽可能容易。

为此,该库提供了一系列适配器,用于与各种缓存介质和配置一起工作,以及几个辅助方法,以使使用一些更常见的缓存类型尽可能简单和直观。

对于使用提供依赖注入的框架的开发人员,所有缓存适配器都遵循共享的CacheInterface合同,允许您针对抽象接口而不是具体实现进行构建(和类型提示)。

当前可用的适配器包括

我总是希望向库中添加更多适配器,所以如果您有不同用例(或能想到我应该支持的缓存解决方案),请随时在未来的版本中向我提出建议。

安装

对于使用Composer的用户,可以通过运行以下命令将库添加到项目中

composer require clvarley/cache

如果您不想使用Composer(以及它带来的所有好处),或者您只想直接包含库,可以通过下载此存储库并包含提供的autoload.php文件来实现。

// Replace '...' with correct path
require_once '.../src/autoload.php';

现在应该会自动加载所有Clvarley\Cache\*类。

版本控制

版本将遵循semver版本控制方案。

保证小版本号之间的兼容性,而任何破坏性更新(包括PHP版本的最小值更新)都将构成主要版本号的变化。

通过遵循此系统,您应该能够在不更改自己的代码的情况下下载新功能和错误修复。🎉

贡献

虽然我将来希望向贡献者开放项目,但到目前为止,我不会接受拉取请求。

缓存类型

文件

最基本形式的缓存之一。FileCache适配器将所有缓存值写入底层文件系统,提供一个对所有请求都可用的持久介质。

为了允许更大的配置,FileCache可以配置为使用您选择的序列化密钥生成方法。有关更多信息,请参阅构造函数的文档。然而,在大多数情况下,默认值应该足够。

用法

基本设置

为了开始使用基本缓存,我们提供了create实用方法。

这将返回一个适配器,其中缓存键通过内部PHP序列化器进行md5散列和序列化。

use Clvarley\Cache\FileCache;

$cache = FileCache::create( 'path/to/cache/dir' );
$cache->set( 'test', 'Data to be cached!' );

// ...

$value = $cache->get( 'test' );

echo $value; // Data to be cached!

这将创建一个新的缓存(以path/to/cache/dir目录为根),并使用键test设置一个值。

缓存值可以是几乎所有类型,不仅仅是字符串。您可以缓存字符串、整数、浮点数、数组和对象。(注意:唯一不能序列化的类型是资源类型)

$cache->set( 'test.float',  3.14 );
$cache->set( 'test.array',  [ 1, 2, 3 ] );
$cache->set( 'test.object', new stdClass );

默认情况下,FileCache将项目保留60秒,但可以通过$lifetime参数来控制。

use Clvarley\Cache\FileCache;

$cache = FileCache::create( 'path/to/cache/dir' );

$cache->set( 'short',   'My short lived value!',     10 );
$cache->set( 'long',    'My long lived value!',      120 );
$cache->set( 'forever', 'This should last forever!', 0 );

在上面的示例中,我们分别缓存了10秒、120秒和-通过指定生命周期为0-永久的值。

过期项目

如果您尝试访问缓存中不存在的项,或者自设置以来已过期的项,get方法将返回null

这种行为适用于所有适配器。

use Clvarley\Cache\FileCache;

$cache = FileCache::create( 'path/to/cache/dir' );

$value = $cache->get( 'key' );

if ( $value === null ) {
    // Cache miss, possibly time to rehydrate
}

除非您能够确保缓存项确实存在,否则始终检查null返回值是一个好主意。

配置

如果您希望更改缓存键的散列方式或值的序列化方式,可以通过构造函数指定这些方法。

use Clvarley\Cache\FileCache;
use Clvarley\Cache\Key\PosixGenerator;
use Clvarley\Cache\Serialization\JsonSerializer;

$serializer = new JsonSerializer();
$generator = new PosixGenerator();

$cache = new FileCache( 'path/to/cache/dir', $serializer, $generator );

上面的代码将使用POSIX安全的文件名写入缓存文件,并将值编码为JSON。

任何实现适当的键生成器序列化器接口的类都可以传递,允许您在需要时编写自己的适配器。

文档

阅读更多关于FileCache的信息.

APCu

提供一个围绕APCu函数包装器的缓存适配器。

需要APCu PHP扩展才能运行。

用法

由于APCu扩展相对容易设置,因此使用此缓存适配器相对简单。因此,此适配器的构造函数不接收任何参数,在调用getset方法之前不需要进行配置。

(您可能仍需要在您的php.ini文件中调整一些值)

use Clvarley\Cache\ApcuCache;

$cache = new ApcuCache();
$cache->set( 'test', 'Stored in APCu!' );

文档

阅读更多关于ApcuCache的信息.

Memcached

一个利用Memcached扩展作为存储系统的缓存适配器。允许您将值存储在一个或多个Memcached服务器中,无论它们是在本地运行还是在网络上。

需要Memcached PHP扩展才能运行。

用法

有两种创建此缓存适配器的方法。您可以直接调用构造函数,传递一个原始的Memcached实例,或者您可以调用create静态方法。

use Clvarley\Cache\MemcachedCache;

// Perform any setup
$memcached = new \Memcached();
$memcached->addServer( '127.0.0.1', 11211 );

// ...

// Wrap the instance
$cache = new MemcachedCache( $memcached );
$cache->get( 'test' );

当使用create实用程序时,您可以跳过中间步骤并直接设置Memcached实例。

use Clvarley\Cache\MemcachedCache;

// Create in place
$cache = MemcachedCache::create( '127.0.0.1', 11211 );
$cache->get( 'test' );

然而,需要注意的是,这种做法意味着在启动之前无法配置底层的Memcached实例。

文档

更多关于MemcachedCache的信息.

简单

最基本的缓存,只是简单地持有本地内存中的项。

注意:由于这个缓存将所有内容都保存在进程内存中,任何缓存项都不会在请求之间持久化。

用法

作为一个相对简单的缓存,创建此适配器的实例不需要设置。

use Clvarley\Cache\SimpleCache;

$cache = new SimpleCache();
$cache->set( 'test', 'Stored in memory!' );

文档

更多关于SimpleCache的信息.

一个内存非常差的缓存适配器。

任何保存到此缓存的项都会被默默地丢弃。

虽然这听起来可能没有用,但有时测试始终返回 null 的实现,或在重构时替换缓存方法可能会有所帮助。

把它想成是 /dev/null 的等价物。

用法

void缓存的使用方法如下

use Clvarley\Cache\VoidCache;

$cache = new VoidCache();
$cache->set( 'test', 'Adios!' );

// Where did my value go?
$cache->get( 'test' ); // null

文档

更多关于VoidCache的信息.