ceus-media / cache
Requires
- php: ^8.1
- ceus-media/common: ^1.0 | 1.0.x-dev
- psr/cache: ^3.0
- psr/simple-cache: ^3.0
Requires (Dev)
- ceus-media/doc-creator: *
- php-parallel-lint/php-parallel-lint: ^1.3 | dev-master
- phpstan/phpstan: ^1
- phpstan/phpstan-strict-rules: ^1
- phpunit/phpunit: ^9.5 | ^10.1
Suggests
- ext-igbinary: *
- ext-memcache: *
- ext-msgpack: *
- ext-pdo: *
- ext-redis: *
This package is auto-updated.
Last update: 2024-08-26 14:32:11 UTC
README
PHP 缓存库,实现 PSR-6 和 PSR-16。
该库是一个存储抽象层,可以用作缓存客户端。
它为几个存储后端提供 CRUD 访问。
关于
该库是一个存储抽象层,可以用作缓存客户端。
它为几个存储后端提供 CRUD 访问。
后端
您可以使用此层使用以下后端存储和读取信息
- 数据库:支持 PDO 的任何数据库
- 文件夹:本地文件
- IniFile:INI 文件内的键值对
- JsonFile:JSON 文件内的键值对
- Memcache:本地或远程 Memcache 服务器内的键值对
- Memory:本地内存内的键值对,非持久化
- Noop:无功能的哑缓存,如果没有其他缓存后端可用,则作为后备
- SerialFile:本地 PHP 序列文件内的键值对
- SerialFolder:本地文件夹内的 PHP 序列文件
- Session:HTTP 会话内的键值对
安装
此库作为 composer 包提供
composer require ceus-media/cache
当然,您需要使用 composer 自动加载器
<?php
require_once 'vendor/autoload.php';
用法
PSR-16 - 简单缓存
创建缓存
use CeusMedia\Cache\Factory as CacheFactory;
$cache = CacheFactory::createStorage( 'Folder', __DIR__.'/cache' );
如果允许,这将会在当前工作目录中创建一个新的文件夹 cache
。
写入缓存
$cache->set( 'aRandomDigit', rand( 0, 9 ) );
在文件夹中会有一个名为 aRandomDigit
的文件,其中包含一个介于 0 到 9 之间的数字。
从缓存中读取
您稍后可以再次读取此信息
$digit = $cache->get( 'aRandomDigit' );
if( NULL !== $digit ){
// cache hit
} else {
// cache miss
}
如您所见,如果请求的信息未缓存(缓存未命中),则结果为 NULL
。
您可以检查信息是否已缓存
if( $cache->has( 'aRandomDigit' ){
// cache hit
} else {
// cache miss
}
PSR-6 - 缓存池
如 PHP-Fig 的 PSR-6 中定义的,有一个带有项的缓存池。
创建缓存
use CeusMedia\Cache\CachePoolFactory;
$pool = CachePoolFactory::createPool( 'Folder', __DIR__.'/cache' );
如果允许,这将会在当前工作目录中创建一个新的文件夹 cache
。
写入缓存
// get an existing or empty item
$item = $pool->getItem( 'datetime' );
// set the new (or first) value
$item->set( date( DATE_ATOM ) );
// persist item in pool
$pool->save( $item );
在文件夹中会有一个名为 datetime
的文件,其中包含时间戳。
从缓存中读取
您稍后可以再次读取此信息
$item = $pool->getItem( 'datetime' );
if( $item->isHit() ){
$date = $item->get();
// ...
} else {
// ...
}
历史
过去
过去,此库被称为 Ceus Media Modules: Storage Engine Abstraction,简称 CMM_SEA。
我们主要用于缓存。
在通过不同的 VCS 迁移以及由于公司范围内的产品重命名后,它变成了 GitHub 上的 CeusMedia/Cache。
由于迁移以实现 PHP-Fig 的缓存相关 PSR,现在有两种方式可以使用此库。
已删除慢速存储以关注性能。
想法
连接器工厂
用连接器对象替换当前用于连接缓存后端的资源字符串。对于每个后端,将有一个连接器类。工厂将简化这些连接器的创建。
分层缓存
缓存客户端实例可以有多个后端,它们以定义的顺序使用。这样,较慢的缓存后端(如数据库或基于文件的缓存)可以由较快的缓存后端(如本地 Memcache 服务器)包装。有许多有趣的使用案例。
扁平化策略
由于一些缓存后端无法存储结构化数据,需要扁平化策略。目前,每个后端实现自己的策略。更好的方式是选择一个策略。
缓存管理器
可以在缓存管理器上注册多个缓存客户端实例,这对于较大的项目,如应用程序框架来说是一个单一的资源。在框架内的操作过程中,开发者可以根据不同的用途选择多个缓存。
更多后端
- Redis
- 非关系型数据库:MongoDB,CouchDB
自定义后端
允许注册自己的缓存后端。