ceus-media/cache

0.6.0 2024-03-18 03:45 UTC

This package is auto-updated.

Last update: 2024-08-26 14:32:11 UTC


README

PHP 缓存库,实现 PSR-6 和 PSR-16。

PSR-6: 缓存接口 PSR-16: 简单缓存

该库是一个存储抽象层,可以用作缓存客户端。

它为几个存储后端提供 CRUD 访问。

Package version Monthly downloads PHP version PHPStan level License Release date Commit date

关于

该库是一个存储抽象层,可以用作缓存客户端。

它为几个存储后端提供 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

自定义后端

允许注册自己的缓存后端。