clvarley / cache
非常简单的面向对象缓存抽象层
Requires
- php: ^7.3 || ^8
Requires (Dev)
- jetbrains/phpstorm-stubs: ^2021.1
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.7
Suggests
- ext-igbinary: More efficient cache value serialization
- ext-json: Allow cache values to be stored as JSON
- ext-memcached: Store cache items using MemCached servers
This package is auto-updated.
Last update: 2024-09-07 20:09:14 UTC
README
一组非常简单的缓存工具。
内容
要求
- 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。
任何实现适当的键生成器和序列化器接口的类都可以传递,允许您在需要时编写自己的适配器。
文档
APCu
提供一个围绕APCu函数包装器的缓存适配器。
需要APCu PHP扩展才能运行。
用法
由于APCu扩展相对容易设置,因此使用此缓存适配器相对简单。因此,此适配器的构造函数不接收任何参数,在调用get和set方法之前不需要进行配置。
(您可能仍需要在您的php.ini
文件中调整一些值)
use Clvarley\Cache\ApcuCache; $cache = new ApcuCache(); $cache->set( 'test', 'Stored in APCu!' );
文档
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实例。
文档
简单
最基本的缓存,只是简单地持有本地内存中的项。
注意:由于这个缓存将所有内容都保存在进程内存中,任何缓存项都不会在请求之间持久化。
用法
作为一个相对简单的缓存,创建此适配器的实例不需要设置。
use Clvarley\Cache\SimpleCache; $cache = new SimpleCache(); $cache->set( 'test', 'Stored in memory!' );
文档
空
一个内存非常差的缓存适配器。
任何保存到此缓存的项都会被默默地丢弃。
虽然这听起来可能没有用,但有时测试始终返回 null 的实现,或在重构时替换缓存方法可能会有所帮助。
把它想成是 /dev/null
的等价物。
用法
void缓存的使用方法如下
use Clvarley\Cache\VoidCache; $cache = new VoidCache(); $cache->set( 'test', 'Adios!' ); // Where did my value go? $cache->get( 'test' ); // null