aledefreitas/zlx_cache

用于帮助网站使用缓存的缓存模块

1.7.0 2021-07-20 11:50 UTC

README

Build Status Latest Stable Version License

介绍

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);

这样,您可以创建使用所需逻辑实现的引擎。