Como o V9 é relativamente incompatível com versões anteriores, leia atentamente o guia de migração para garantir a migração mais tranquila possível. Uma das maiores mudanças é o sistema de configuração que agora é um objeto que substitui o array primitivo que usávamos para implementar naquela época. Além disso, observe que o V9 requer pelo menos PHP 8 ou superior para funcionar corretamente.
Mais informações no Wiki A simplicidade da abstração: uma classe para muitos caches de back-end. Você não precisa reescrever seu código muitas vezes.
Sinta-se à vontade para propor um driver fazendo um novo Pull Request , eles são bem-vindos!
Motoristas regulares | Pilotos de alto desempenho | Drivers de desenvolvimento (núcleo) | Drivers agregados em cluster (núcleo) |
---|---|---|---|
Apcu (núcleo)(Suporte APC removido) | Arangodb (extensão) | Devnull | FullReplicationCluster |
Dynamodb (extensão) | Cassandra (A extensão PHP não é mais mantida pelo Datastax, pode estar obsoleta na v10) | Devrandom | SemiReplicationCluster |
Files (núcleo) | CouchBasev3 (núcleo)(Será obsoleto a partir da v10) | Memory (Anteriormente denominado Memstatic ) | MasterSlaveReplicationCluster |
Firestore (extensão) | CouchBasev4 (extensão) | RandomReplicationCluster | |
Leveldb (núcleo) | Couchdb (extensão) | ||
Memcache(d) (núcleo) | Mongodb (extensão) | ||
Solr (extensão) | Predis (núcleo) | ||
Sqlite (núcleo) | Ravendb _(Extensão) | ||
Wincache (Núcleo)( Obsoleto a partir da v9.2, será removido a partir da v10) | Relay (até o final de 2024) | ||
Zend Disk Cache (núcleo) | Redis / RedisCluster (núcleo) | ||
Ssdb (núcleo) | |||
Zend Memory Cache (núcleo) |
* Descrições de driver disponíveis em DOCS/DRIVERS.md
A partir da v9.2, uma nova extensão do Couchbase foi lançada: Couchbasev4. Também foi adicionada uma nova extensão de driver: Ravendb
. O driver será desenvolvido ativamente no recurso para permitir uma configuração mais refinada. Esta nova extensão é o início de uma nova era para o Phpfastcache junto com algumas outras:
Muitos drivers foram movidos do núcleo para seu próprio sub-repositório como uma extensão autônoma: Arangodb
, Couchdb
, Dynamodb
, Firestore
, Mongodb
, Solr
.
Eles podem ser facilmente adicionados através do compositor, ex: composer install phpfastcache/couchbasev4-extension
No entanto, Couchbasev3
permanecerá no núcleo por motivos de compatibilidade, mas será descontinuado.
O Phpfastcache foi desenvolvido ao longo dos anos com 3 objetivos principais:
Phpfastcache fornece muitas APIs úteis:
Método | Retornar | Descrição |
---|---|---|
addTag($tagName) | ExtendedCacheItemInterface | Adiciona uma etiqueta |
addTags(array $tagNames) | ExtendedCacheItemInterface | Adiciona várias tags |
append($data) | ExtendedCacheItemInterface | Acrescenta dados a uma string ou array (push) |
decrement($step = 1) | ExtendedCacheItemInterface | Piada redundante... |
expiresAfter($ttl) | ExtendedCacheItemInterface | Permite estender a vida útil de uma entrada sem alterar seu valor (anteriormente conhecido como touch()) |
expiresAt($expiration) | ExtendedCacheItemInterface | Define o tempo de expiração para este item de cache (como um objeto DateTimeInterface) |
get() | mixed | O getter, obviamente, retorna seu objeto de cache |
getCreationDate() | DatetimeInterface | Obtém a data de criação deste item de cache (como um objeto DateTimeInterface) * |
getDataAsJsonString() | string | Retorne os dados como uma string json bem formatada |
getEncodedKey() | string | Retorna o identificador final e interno do item (chave), geralmente usado para fins de depuração |
getExpirationDate() | ExtendedCacheItemInterface | Obtém a data de expiração como um objeto Datetime |
getKey() | string | Retorna o identificador do item (chave) |
getLength() | int | Obtém o comprimento dos dados se os dados forem uma string, uma matriz ou objetos que implementem a interface Countable . |
getModificationDate() | DatetimeInterface | Obtém a data de modificação deste item de cache (como um objeto DateTimeInterface) * |
getTags() | string[] | Obtém as tags |
hasTag(string $tagName) | bool | Verifique se o item de cache contém uma tag específica |
hasTags(array $tagNames, int $strategy): bool | bool | Verifique se o item de cache contém uma ou mais tags específicas com estratégia opcional (padrão TAG_STRATEGY_ONE) |
isTagged(): bool | bool | Verifique se o item de cache possui pelo menos uma tag (v9.2) |
getTagsAsString($separator = ', ') | string | Obtém os dados como uma string separada por $separator |
getTtl() | int | Obtém o tempo de vida restante como um número inteiro |
increment($step = 1) | ExtendedCacheItemInterface | Para nos permitir contar com um item inteiro |
isEmpty() | bool | Verifica se os dados estão vazios ou não, apesar do status de acerto/erro. |
isExpired() | bool | Verifica se a sua entrada de cache expirou |
isHit() | bool | Verifica se a sua entrada de cache existe e ainda é válida, é equivalente a isset() |
isNull() | bool | Verifica se os dados são nulos ou não, apesar do status de acerto/erro. |
prepend($data) | ExtendedCacheItemInterface | Acrescenta dados a uma string ou array (unshift) |
removeTag($tagName) | ExtendedCacheItemInterface | Remove uma etiqueta |
removeTags(array $tagNames) | ExtendedCacheItemInterface | Remove várias tags |
set($value) | ExtendedCacheItemInterface | O setter, para quem perdeu, pode ser qualquer coisa, exceto recursos ou objetos não serializadores (ex: objetos PDO, ponteiros de arquivo, etc). |
setCreationDate($expiration) | DatetimeInterface | Define a data de criação deste item de cache (como um objeto DateTimeInterface) * |
setEventManager($evtMngr) | ExtendedCacheItemInterface | Define o gerenciador de eventos |
setExpirationDate() | ExtendedCacheItemInterface | Alias de expireAt() (para mais lógica de código) |
setModificationDate($expiration) | DatetimeInterface | Define a data de modificação deste item de cache (como um objeto DateTimeInterface) * |
setTags(array $tags) | ExtendedCacheItemInterface | Define várias tags |
* Exige que a diretiva de configuração "itemDetailedDate" seja habilitada, caso contrário, uma LogicException será lançada |
Métodos (por ordem alfabética) | Retornar | Descrição |
---|---|---|
appendItemsByTag($tagName, $data) | bool | Acrescenta itens por uma tag |
appendItemsByTags(array $tagNames, $data) | bool | Acrescenta itens por um dos vários nomes de tags |
attachItem($item) | void | (Re-)anexa um item ao pool |
clear() | bool | Permite esvaziar completamente o cache e reiniciar desde o início |
commit() | bool | Persiste quaisquer itens de cache adiados |
decrementItemsByTag($tagName, $step = 1) | bool | Diminui itens por uma tag |
decrementItemsByTags(array $tagNames, $step = 1) | bool | Diminui itens por um dos vários nomes de tags |
deleteItem($key) | bool | Exclui um item |
deleteItems(array $keys) | bool | Exclui um ou mais itens |
deleteItemsByTag($tagName) | bool | Exclui itens por uma tag |
deleteItemsByTags(array $tagNames, int $strategy) | bool | Exclui itens por um dos vários nomes de tags |
detachItem($item) | void | Desanexa um item do pool |
getConfig() | ConfigurationOption | Retorna o objeto de configuração |
getConfigOption($optionName); | mixed | Retorna um valor de configuração por sua chave $optionName |
getDefaultConfig() | ConfigurationOption | Retorna o objeto de configuração padrão (não alterado pela instância do objeto) |
getDriverName() | string | Retorna o nome do driver atual (sem o namespace) |
getEventManager() | EventManagerInterface | Obtém o gerenciador de eventos |
getHelp() | string | Fornece uma ajuda muito básica para um driver específico |
getInstanceId() | string | Retorna o ID da instância |
getItem($key) | ExtendedCacheItemInterface | Recupera um item e retorna um item vazio se não for encontrado |
getItems(array $keys) | ExtendedCacheItemInterface[] | Recupera um ou mais itens e retorna uma matriz de itens. A partir da versão 9.2, uma melhoria interna foi feita neste método. |
getAllItems(string $pattern = '') | ExtendedCacheItemInterface[] | (v9.2) Recupera todos os itens de cache com um limite rígido de 9.999 itens. Suporte limitado a alguns drivers |
getItemsAsJsonString(array $keys) | string | Retorna Uma string json que representa uma matriz de itens |
getItemsByTag($tagName, $strategy) | ExtendedCacheItemInterface[] | Retorna itens por uma tag |
getItemsByTags(array $tagNames, $strategy) | ExtendedCacheItemInterface[] | Retorna itens por um dos vários nomes de tags |
getItemsByTagsAsJsonString(array $tagNames, $strategy) | string | Retorna Uma string json que representa uma matriz de itens correspondentes |
getStats() | DriverStatistic | Retorna as estatísticas do cache como um objeto, útil para verificar o espaço em disco usado pelo cache, etc. |
hasEventManager() | bool | Verifique o gerenciador de eventos |
hasItem($key) | bool | Testa se um item existe |
incrementItemsByTag($tagName, $step = 1, $strategy) | bool | Incrementa itens por uma tag |
incrementItemsByTags(array $tagNames, $step = 1, $strategy) | bool | Incrementa itens por um dos vários nomes de tags |
isAttached($item) | bool | Verifique se um item (ainda) está anexado |
prependItemsByTag($tagName, $data, $strategy) | bool | Acrescenta itens por uma tag |
prependItemsByTags(array $tagNames, $data, $strategy) | bool | Acrescenta itens com um dos vários nomes de tags |
save(CacheItemInterface $item) | bool | Persiste um item de cache imediatamente |
saveDeferred(CacheItemInterface $item) | bool | Define um item de cache para persistir posteriormente |
saveMultiple(...$items) | bool | Persiste vários itens de cache imediatamente |
setEventManager(EventManagerInterface $evtMngr) | ExtendedCacheItemPoolInterface | Define o gerenciador de eventos |
na V8 : Múltiplas estratégias ( $strategy
) agora são suportadas para marcação:
TaggableCacheItemPoolInterface::TAG_STRATEGY_ONE
permite que você obtenha itens de cache por pelo menos UMA das tags correspondentes especificadas. Comportamento padrão.TaggableCacheItemPoolInterface::TAG_STRATEGY_ALL
permite que você obtenha itens de cache por TODAS as tags correspondentes especificadas (o item de cache pode ter tags adicionais)TaggableCacheItemPoolInterface::TAG_STRATEGY_ONLY
permite que você obtenha itens de cache APENAS pelas tags correspondentes especificadas (o item de cache não pode ter tags adicionais)Ele também suporta múltiplas chamadas, marcação, pasta de configuração para armazenamento em cache. Veja nossas pastas de exemplos para obter mais informações.
Phpfastcache fornece uma classe que fornece informações básicas sobre a instalação do Phpfastcache
PhpfastcacheApi::GetVersion();
PhpfastcacheApi::getChangelog();
PhpfastcacheApi::getPhpfastcacheVersion();
PhpfastcacheApi::getPhpfastcacheChangelog();
Boas notícias, a partir do V6, um adaptador Psr16 é fornecido para manter o cache mais simples usando getters/setters muito básicos:
get($key, $default = null);
set($key, $value, $ttl = null);
delete($key);
clear();
getMultiple($keys, $default = null);
setMultiple($values, $ttl = null);
deleteMultiple($keys);
has($key);
Uso básico:
<?php
use Phpfastcache Helper Psr16Adapter ;
$ defaultDriver = ' Files ' ;
$ Psr16Adapter = new Psr16Adapter ( $ defaultDriver );
if (! $ Psr16Adapter -> has ( ' test-key ' )){
// Setter action
$ data = ' lorem ipsum ' ;
$ Psr16Adapter -> set ( ' test-key ' , ' lorem ipsum ' , 300 ); // 5 minutes
} else {
// Getter action
$ data = $ Psr16Adapter -> get ( ' test-key ' );
}
/**
* Do your stuff with $data
*/
Internamente, o adaptador Psr16 chama a API Phpfastcache por meio do gerenciador de cache.
A partir da V6, o Phpfastcache fornece um mecanismo de eventos. Você pode se inscrever em um evento passando um Closure para um evento ativo:
<?php
use Phpfastcache EventManager ;
/**
* Bind the event callback
*/
EventManager:: getInstance ()-> onCacheGetItem ( function ( ExtendedCacheItemPoolInterface $ itemPool , ExtendedCacheItemInterface $ item ){
$ item -> set ( ' [HACKED BY EVENT] ' . $ item -> get ());
});
Um retorno de chamada de evento pode ser desvinculado, mas você DEVE fornecer um nome para o retorno de chamada anteriormente:
<?php
use Phpfastcache EventManager ;
/**
* Bind the event callback
*/
EventManager:: getInstance ()-> onCacheGetItem ( function ( ExtendedCacheItemPoolInterface $ itemPool , ExtendedCacheItemInterface $ item ){
$ item -> set ( ' [HACKED BY EVENT] ' . $ item -> get ());
}, ' myCallbackName ' );
/**
* Unbind the event callback
*/
EventManager:: getInstance ()-> unbindEventCallback ( ' onCacheGetItem ' , ' myCallbackName ' );
A partir do V8 você pode simplesmente assinar todos os eventos do Phpfastcache.
Mais informações sobre a implementação e os eventos estão disponíveis no Wiki
A partir da V6, o Phpfastcache fornece alguns ajudantes para facilitar seu código.
Que mais venham no futuro, fique à vontade para contribuir!
Confira o WIKI para saber como implementar o recurso de clustering de cache agregado.
composer require phpfastcache/phpfastcache
<?php
use Phpfastcache CacheManager ;
use Phpfastcache Config ConfigurationOption ;
// Setup File Path on your config files
// Please note that as of the V6 .1 the "path" config
// can also be used for Unix sockets ( Redis , Memcache , etc )
CacheManager:: setDefaultConfig ( new ConfigurationOption ([
' path ' => ' /var/www/phpfastcache.com/dev/tmp ' , // or in windows "C:/tmp/"
]));
// In your class , function , you can call the Cache
$ InstanceCache = CacheManager:: getInstance ( ' files ' );
/**
* Try to get $products from Caching First
* product_page is "identity keyword";
*/
$ key = " product_page " ;
$ CachedString = $ InstanceCache -> getItem ( $ key );
$ your_product_data = [
' First product ' ,
' Second product ' ,
' Third product '
/* ... */
];
if (! $ CachedString -> isHit ()) {
$ CachedString -> set ( $ your_product_data )-> expiresAfter ( 5 ); //in seconds , also accepts Datetime
$ InstanceCache -> save ( $ CachedString ); // Save the cache item just like you do with doctrine and entities
echo ' FIRST LOAD // WROTE OBJECT TO CACHE // RELOAD THE PAGE AND SEE // ' ;
echo $ CachedString -> get ();
} else {
echo ' READ FROM CACHE // ' ;
echo $ CachedString -> get ()[ 0 ]; // Will print ' First product'
}
/**
* use your products here or return them;
*/
echo implode ( ' <br /> ' , $ CachedString -> get ()); // Will echo your product list
Para desenvolvedores curiosos, há muitos outros exemplos disponíveis aqui.
Encontrou um problema ou tem uma ideia? Venha aqui e conte-nos!