2.x-dev
2.9999999.9999999.9999999-devMódulo de cache para os sites dos servidores da PROJECT / ZLX
MIT
The Requires
- php >=5.6
- psr/cache 1.0.1
by Alexandre de Freitas Caetano
Wallogit.com
2017 © Pedro Peláez
Módulo de cache para os sites dos servidores da PROJECT / ZLX
A classe ZLX\Cache traz uma forma elegante de utilizar cache na aplicação, facilitando a implementação de sistemas de Cache em sua aplicação. Com esta classe é possível criar várias instâncias separadas de Cache para sua aplicação, sem forçar que sua aplicação se restrinja a apenas uma implementação de cache. Você poderá alterar ou criar engines de cache com sua própria lógica, sobre-escrevendo a classe CacheEngine. Também pode apagar dados de várias instâncias de uma só vez, através dos namespaces atribuídos às instâncias!, (*2)
É possível instalar o ZLX\Cache através do Composer:, (*3)
composer require aledefreitas/zlx_cache
Abaixo citaremos as funções que são utilizadas no gerenciamento do cache na sua aplicação. Primeiramente, iniciamos o Cache, no início de seu código de inicialização da aplicação:, (*4)
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);
Tenha muita atenção ao setar a configuração 'prefix' na inicialização do Cache. Ela é o prefixo para as entradas de cache de seu site, e não deve ser duplicada com nenhum outro prefixo igual em qualquer outro site no servidor inteiro., (*5)
Podemos criar instancias novas programáticamente em tempo de execução com a função Cache::create():, (*6)
use ZLX\Cache\Cache;
$config = [ 'engine' => 'memcached',
'duration' => '+10 minutes',
'groups' => [ 'Posts', 'Comments', 'Session' ],
'prevent_clear' => [ 'Session' ]
];
Cache::create('meu_cache', $config);
Após inicializado, poderemos utilizar todas suas funcionalidades:, (*7)
Todas as funções tem como padrão a instância 'default'. Caso seja omitido este parâmetro, a instância utilizada será a 'default'. Você pode especificar o parametro para utilizar outra instância., (*8)
Salva uma chave e seu valor no cache. Retorna (boolean) com true quando foi salvo com sucesso, e false quando não foi salvo com sucesso., (*9)
Cache::set('chave', 'teste de valor', 'default');
Retorna o valor de uma chave do cache. Retorna (boolean) false caso não seja encontrado nada., (*10)
Cache::get('chave', 'default');
Apaga o valor de uma chave do cache. Retorna (boolean) com true caso delete, e false caso não delete., (*11)
Cache::delete('chave', 'default');
Pesquisa o valor da chave requisitado, caso o mesmo não exista, executa a função callable e salva na chave requisitada (e retorna) seu retorno., (*12)
Cache::remember('chave', function() {
// Inclua sua lógica aqui
return $retorno;
}, 'default');
Invalida todas as chaves de um grupo determinado na instancia escolhida, (*13)
Cache::clearGroup('Grupo', 'default');
Apaga todas as entradas de cache da instancia. Caso ignore_prevents seja setado como true, ignorará até os grupos em 'prevent_clear'., (*14)
Cache::clear(false, 'default');
Invoca o método clear() de todas as instâncias sob o namespace escolhido, (*15)
Cache::clearNamespace('Namespace');
A funcionalidade de grupos de Cache no ZLX\Cache é interessante para invalidar/resetar apenas entradas de cache em um grupo específico. Suponhamos que em determinado momento da sua lógica, você cria uma entrada de Cache sob o grupo 'Posts', para guardar os dados de uma postagem específica:, (*16)
Cache::set("Posts.data.".$id_post, [ "title" => "Meus dados do post", "body" => "Corpo do meu post" ]);
Ao utilizar o padrão 'Grupo.chave' para salvar, deletar, ou retornar uma chave (set(),get()***,delete(),remember()), caso o grupo esteja no array de grupos da sua instância, ele será salvo sob este grupo., (*17)
Ao invocar o método**clearGroup()***, invalidamos todas as chaves sob este grupo, de forma que na próxima requisição de qualquer chave deste grupo, ela não será encontrada no cache, e portanto será renovada!, (*18)
É muito parecido com o funcionamento de grupos, porém funciona num escopo acima dos grupos. Os grupos pertencem à instancia, e as instâncias pertencem aos namespaces. Quando o método**clearNamespace()*** for invocado, ele irá executar um clear (***ignorando os prevents***) em todas as instâncias pertencentes ao namespace a ser resetado., (*19)
O ZLX\Cache permite que sejam criadas Engines personalizadas para que possa-se desenvolver as lógicas necessárias do programador através de abstração da classe ZLX\Cache\CacheEngine!, (*20)
Abaixo segue o exemplo de uma classe personalizada:, (*21)
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
}
}
Então, será possível adicionar instâncias desta classe de duas maneiras diferentes:, (*22)
// 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);
Desta forma, você pode criar engines que utilizam a lógica que for necessária implementada., (*23)
Módulo de cache para os sites dos servidores da PROJECT / ZLX
MIT