aledefreitas / zlx_cache
用于帮助网站使用缓存的缓存模块
Requires
- php: >=7.0
Requires (Dev)
- phpunit/phpunit: ^6.5
README
介绍
ZLX\Cache 类提供了一个优雅的方式来在应用程序中使用缓存,简化了在应用程序中实现缓存系统的过程。使用这个类,您可以创建多个独立的缓存实例,而无需限制应用程序只能使用一种缓存实现。您可以更改或创建具有自己逻辑的缓存引擎,通过覆盖 CacheEngine 类。您还可以通过分配给实例的命名空间一次性删除多个实例中的数据!
安装
可以通过 Composer 安装 ZLX\Cache
composer require aledefreitas/zlx_cache
要求
- PHP 7.0+
预构建引擎
- Redis
- Memcached
- Memcache
使用方式
以下列出在应用程序缓存管理中使用的函数。首先,在应用程序初始化代码的开始处启动缓存:
use ZLX\Cache\Cache; $config = [ 'prefix' => 'cache_prefix', 'instances' => [ // Utilizamos default, pois é a configuração padrão do cache 'default' => [ 'engine' => 'memcached', 'duration' => '+10 minutes', 'groups' => [ 'Posts', 'Comments', 'Session' ], 'prevent_clear' => [ 'Session' ] ] ] ]; // Iniciamos o cache Cache::init($config);
注意!
在初始化缓存时,请务必注意设置 'prefix' 配置。它是您网站缓存条目的前缀,并且不应与服务器上任何其他网站的任何相同前缀重复。
动态创建实例(在运行时)
我们可以使用 Cache::create()
函数在运行时程序化地创建新的实例。
use ZLX\Cache\Cache; $config = [ 'engine' => 'memcached', 'duration' => '+10 minutes', 'groups' => [ 'Posts', 'Comments', 'Session' ], 'prevent_clear' => [ 'Session' ] ]; Cache::create('meu_cache', $config);
实例属性
- 'engine': 要使用的引擎。例如:'memcached'
- 'duration': 缓存键的持续时间。例如:'+40 minutes'
- 'prefix': 实例的前缀。例如:'prefixo_zlx'
- 'namespaces': 包含实例所属命名空间的数组。例如:[ 'Posts', 'Admin' ]
- 'groups': 包含实例所属组的数组。例如:[ 'Comments', 'Session', 'Users' ]
- 'prevent_clear': 包含在 clear(false) 方法中要忽略的组的数组
初始化后,我们可以使用所有功能
注意!
所有函数默认为 'default' 实例。如果省略此参数,则使用的实例将是 'default'。您可以指定参数以使用其他实例。
set(key, value [, instance = 'default'])
在缓存中保存一个键及其值。如果成功保存,则返回 (boolean)
为 true,如果未成功保存,则返回 false。
Cache::set('chave', 'teste de valor', 'default');
get(key [, instance = 'default'])
返回缓存中键的值。如果没有找到任何内容,则返回 (布尔值) false
。
Cache::get('chave', 'default');
delete(key [, instance = 'default')
删除缓存中键的值。删除成功则返回 (布尔值) true
,否则返回 (布尔值) false
。
Cache::delete('chave', 'default');
remember(key, callable [, instance = 'default')
搜索请求的键值,如果该键不存在,则执行 callable
函数,并将其返回值保存到请求的键(并返回)。
Cache::remember('chave', function() { // Inclua sua lógica aqui return $retorno; }, 'default');
clearGroup(group [, instance = 'default')
在所选实例中使指定组的所有键无效
Cache::clearGroup('Grupo', 'default');
clear([ ignore_prevents = false [, instance = 'default')
删除实例中所有缓存条目。如果将 ignore_prevents 设置为 true
,则忽略 'prevent_clear' 中的所有组。
Cache::clear(false, 'default');
clearNamespace(namespace)
调用所选命名空间下所有实例的 clear() 方法
Cache::clearNamespace('Namespace');
缓存组的运行机制
在 ZLX\Cache 中,缓存组的运行机制非常有用,可以仅针对特定组的缓存条目进行失效/重置。假设在您的逻辑中某个时刻,您在 'Posts' 组下创建了一个缓存条目,以保存特定帖子的数据
Cache::set("Posts.data.".$id_post, [ "title" => "Meus dados do post", "body" => "Corpo do meu post" ]);
当使用 'Grupo.chave' 模式保存、删除或检索键(set()、get()、delete()、remember())时,如果该组位于您的实例的组数组中,则它将保存在此组下。
调用 clearGroup() 方法后,将使该组下的所有键无效,因此在下一次请求此组的任何键时,它将不会在缓存中找到,因此将被刷新!
命名空间的运行机制
与组的功能非常相似,但它在组之上运行。组属于实例,实例属于命名空间。当调用 clearNamespace() 方法时,它将在要重置的命名空间下的所有实例上执行清除操作(忽略阻止)。
创建和使用自定义引擎
ZLX\Cache 允许创建自定义引擎,以便可以通过抽象 ZLX\Cache\CacheEngine 类来开发程序员所需的所有逻辑!
以下是自定义类的示例
use ZLX\Cache\CacheEngine; class CustomCacheEngine extends CacheEngine { public $_defaultConfigs; // Configurações padrões public function __construct(array $config) { // Lógica do método construtor $this->_configs = array_merge($this->_defaultConfigs, $config); // Merge das configurações padrões. É necessário caso haja configurações padrões. parent::__construct($config); } public function set($key, $value, $custom_ttl = false) { // Lógica de salvamento de valores no cache } public function get($key) { // Lógica de busca de valores no cache } public function delete($key) { // Lógica de apagamento de valor no cache } public function clear($ignore_prevents) { // Lógica para reset do cache } public function add($key, $value, $ttl = 3) { // Lógica para add no cache } }
因此,可以通过两种不同的方式添加此类的实例
// Através da inicialização do Cache use ZLX\Cache\Cache; $config = [ 'prefix' => 'cache_prefix', 'instances' => [ 'meu_cache' => [ 'engine' => 'CustomCacheEngine', 'duration' => '+10 minutes', 'groups' => [ 'Posts', 'Comments', 'Session' ], 'prevent_clear' => [ 'Session' ] ] ] ]; Cache::init($config);
// Através da inicialização do Cache use ZLX\Cache\Cache; $config = [ 'engine' => 'CustomCacheEngine', 'duration' => '+10 minutes', 'groups' => [ 'Posts', 'Comments', 'Session' ], 'prevent_clear' => [ 'Session' ] ]; Cache::create('meu_cache', $config);
这样,您可以创建使用所需逻辑实现的引擎。