La V9 étant relativement peu compatible avec les versions précédentes, veuillez lire attentivement le guide de migration pour vous assurer la migration la plus fluide possible. L'un des changements les plus importants est le système de configuration qui est désormais un objet qui remplace le tableau primitif que nous avions l'habitude d'implémenter à l'époque. Veuillez également noter que la V9 nécessite au moins PHP 8 ou supérieur pour fonctionner correctement.
Plus d'informations dans Wiki La simplicité de l'abstraction : une classe pour plusieurs caches backend. Vous n’avez pas besoin de réécrire votre code plusieurs fois.
N'hésitez pas à proposer un chauffeur en faisant une nouvelle Pull Request , ils sont les bienvenus !
Chauffeurs réguliers | Pilotes hautes performances | Pilotes de développement (Core) | Pilotes agrégés en cluster (Core) |
---|---|---|---|
Apcu (noyau)(Support APC supprimé) | Arangodb (Extension) | Devnull | FullReplicationCluster |
Dynamodb (Extension) | Cassandra (L'extension PHP n'est plus maintenue par Datastax, peut être obsolète dans la v10) | Devrandom | SemiReplicationCluster |
Files (noyau) | CouchBasev3 (noyau)(Sera obsolète à partir de la v10) | Memory (Anciennement nommé Memstatic ) | MasterSlaveReplicationCluster |
Firestore (Extension) | CouchBasev4 (Extension) | RandomReplicationCluster | |
Leveldb (noyau) | Couchdb (extension) | ||
Memcache(d) (noyau) | Mongodb (Extension) | ||
Solr (Extension) | Predis (noyau) | ||
Sqlite (noyau) | Ravendb (Extension) | ||
Wincache (noyau)( Obsolète à partir de la v9.2, sera supprimé à partir de la v10) | Relay (d'ici fin 2024) | ||
Zend Disk Cache (noyau) | Redis / RedisCluster (noyau) | ||
Ssdb (noyau) | |||
Zend Memory Cache (noyau) |
* Descriptions des pilotes disponibles dans DOCS/DRIVERS.md
Depuis la version 9.2, une nouvelle extension Couchbase a été publiée : Couchbasev4. Une nouvelle extension de pilote a également été ajoutée : Ravendb
. Le pilote sera activement développé dans la fonctionnalité pour permettre une meilleure configuration plus fine. Cette nouvelle extension marque le début d'une nouvelle ère pour Phpfastcache et quelques autres :
De nombreux pilotes ont été déplacés du noyau vers leur propre sous-référentiel en tant qu'extension autonome : Arangodb
, Couchdb
, Dynamodb
, Firestore
, Mongodb
, Solr
.
Ils peuvent être facilement ajoutés via composer, ex : composer install phpfastcache/couchbasev4-extension
Cependant Couchbasev3
restera dans le noyau pour des raisons de compatibilité mais sera obsolète.
Phpfastcache s'est développé au fil des années avec 3 objectifs principaux :
Phpfastcache vous propose de nombreuses API utiles :
Méthode | Retour | Description |
---|---|---|
addTag($tagName) | ExtendedCacheItemInterface | Ajoute une balise |
addTags(array $tagNames) | ExtendedCacheItemInterface | Ajoute plusieurs balises |
append($data) | ExtendedCacheItemInterface | Ajoute des données à une chaîne ou à un tableau (push) |
decrement($step = 1) | ExtendedCacheItemInterface | Blague redondante... |
expiresAfter($ttl) | ExtendedCacheItemInterface | Permet de prolonger la durée de vie d'une entrée sans altérer sa valeur (anciennement appelé touch()) |
expiresAt($expiration) | ExtendedCacheItemInterface | Définit le délai d'expiration de cet élément de cache (en tant qu'objet DateTimeInterface) |
get() | mixed | Le getter, évidemment, renvoie votre objet cache |
getCreationDate() | DatetimeInterface | Obtient la date de création de cet élément de cache (en tant qu'objet DateTimeInterface) * |
getDataAsJsonString() | string | Renvoie les données sous forme de chaîne JSON bien formatée |
getEncodedKey() | string | Renvoie l'identifiant final et interne de l'élément (clé), généralement utilisé à des fins de débogage |
getExpirationDate() | ExtendedCacheItemInterface | Obtient la date d'expiration en tant qu'objet Datetime |
getKey() | string | Renvoie l'identifiant de l'élément (clé) |
getLength() | int | Obtient la longueur des données si les données sont une chaîne, un tableau ou des objets qui implémentent l'interface Countable . |
getModificationDate() | DatetimeInterface | Obtient la date de modification de cet élément de cache (en tant qu'objet DateTimeInterface) * |
getTags() | string[] | Obtient les balises |
hasTag(string $tagName) | bool | Vérifiez si l'élément de cache contient une balise spécifique |
hasTags(array $tagNames, int $strategy): bool | bool | Vérifiez si l'élément de cache contient une ou plusieurs balises spécifiques avec une stratégie facultative (par défaut : TAG_STRATEGY_ONE). |
isTagged(): bool | bool | Vérifiez si l'élément de cache a au moins une balise (v9.2) |
getTagsAsString($separator = ', ') | string | Obtient les données sous forme de chaîne séparée par $separator |
getTtl() | int | Obtient le temps de vie restant sous forme d'entier |
increment($step = 1) | ExtendedCacheItemInterface | Pour nous permettre de compter sur un élément entier |
isEmpty() | bool | Vérifie si les données sont vides ou non malgré le statut hit/miss. |
isExpired() | bool | Vérifie si votre entrée de cache a expiré |
isHit() | bool | Vérifie si votre entrée de cache existe et est toujours valide, c'est l'équivalent de isset() |
isNull() | bool | Vérifie si les données sont nulles ou non malgré le statut hit/miss. |
prepend($data) | ExtendedCacheItemInterface | Ajoute les données au début d'une chaîne ou d'un tableau (unshift) |
removeTag($tagName) | ExtendedCacheItemInterface | Supprime une balise |
removeTags(array $tagNames) | ExtendedCacheItemInterface | Supprime plusieurs balises |
set($value) | ExtendedCacheItemInterface | Le setter, pour ceux qui l'ont manqué, peut être n'importe quoi sauf des ressources ou un objet non sérialiseur (ex : objets PDO, pointeurs de fichiers, etc.). |
setCreationDate($expiration) | DatetimeInterface | Définit la date de création de cet élément de cache (en tant qu'objet DateTimeInterface) * |
setEventManager($evtMngr) | ExtendedCacheItemInterface | Définit le gestionnaire d'événements |
setExpirationDate() | ExtendedCacheItemInterface | Alias de expireAt() (pour plus de logique de code) |
setModificationDate($expiration) | DatetimeInterface | Définit la date de modification de cet élément de cache (en tant qu'objet DateTimeInterface) * |
setTags(array $tags) | ExtendedCacheItemInterface | Définit plusieurs balises |
* Exiger que la directive de configuration "itemDetailedDate" soit activée, sinon une LogicException sera levée |
Méthodes (par ordre alphabétique) | Retour | Description |
---|---|---|
appendItemsByTag($tagName, $data) | bool | Ajoute des éléments par une balise |
appendItemsByTags(array $tagNames, $data) | bool | Ajoute des éléments par l'un des multiples noms de balises |
attachItem($item) | void | (Ré)attache un élément à la piscine |
clear() | bool | Permet de vider complètement le cache et de redémarrer depuis le début |
commit() | bool | Conserve tous les éléments de cache différés |
decrementItemsByTag($tagName, $step = 1) | bool | Décrémente les éléments par une balise |
decrementItemsByTags(array $tagNames, $step = 1) | bool | Décrémente les éléments selon l'un des multiples noms de balises |
deleteItem($key) | bool | Supprime un élément |
deleteItems(array $keys) | bool | Supprime un ou plusieurs éléments |
deleteItemsByTag($tagName) | bool | Supprime les éléments par une balise |
deleteItemsByTags(array $tagNames, int $strategy) | bool | Supprime les éléments par l'un des multiples noms de balises |
detachItem($item) | void | Détache un élément du pool |
getConfig() | ConfigurationOption | Renvoie l'objet de configuration |
getConfigOption($optionName); | mixed | Renvoie une valeur de configuration par sa clé $optionName |
getDefaultConfig() | ConfigurationOption | Renvoie l'objet de configuration par défaut (non modifié par l'instance de l'objet) |
getDriverName() | string | Renvoie le nom du pilote actuel (sans l'espace de noms) |
getEventManager() | EventManagerInterface | Obtient le gestionnaire d'événements |
getHelp() | string | Fournit une aide très basique pour un pilote spécifique |
getInstanceId() | string | Renvoie l'ID de l'instance |
getItem($key) | ExtendedCacheItemInterface | Récupère un élément et renvoie un élément vide s'il n'est pas trouvé |
getItems(array $keys) | ExtendedCacheItemInterface[] | Récupère un ou plusieurs éléments et renvoie un tableau d'éléments. Depuis la version 9.2, une amélioration interne a été apportée à cette méthode. |
getAllItems(string $pattern = '') | ExtendedCacheItemInterface[] | (v9.2) Récupère tous les éléments du cache avec une limite stricte de 9999 éléments. Prise en charge limitée à certains pilotes |
getItemsAsJsonString(array $keys) | string | Renvoie Une chaîne json qui représente un tableau d'éléments |
getItemsByTag($tagName, $strategy) | ExtendedCacheItemInterface[] | Renvoie les éléments par une balise |
getItemsByTags(array $tagNames, $strategy) | ExtendedCacheItemInterface[] | Renvoie les éléments par l'un des multiples noms de balises |
getItemsByTagsAsJsonString(array $tagNames, $strategy) | string | Renvoie Une chaîne json qui représente un tableau d'éléments correspondant |
getStats() | DriverStatistic | Renvoie les statistiques du cache sous forme d'objet, utile pour vérifier l'espace disque utilisé par le cache, etc. |
hasEventManager() | bool | Vérifiez le gestionnaire d'événements |
hasItem($key) | bool | Teste si un élément existe |
incrementItemsByTag($tagName, $step = 1, $strategy) | bool | Incrémente les éléments par une balise |
incrementItemsByTags(array $tagNames, $step = 1, $strategy) | bool | Incrémente les éléments selon l'un des multiples noms de balises |
isAttached($item) | bool | Vérifier si un élément est (encore) attaché |
prependItemsByTag($tagName, $data, $strategy) | bool | Ajoute les éléments au début d'une balise |
prependItemsByTags(array $tagNames, $data, $strategy) | bool | Ajoute les éléments au début de l'un des multiples noms de balises |
save(CacheItemInterface $item) | bool | Conserve immédiatement un élément du cache |
saveDeferred(CacheItemInterface $item) | bool | Définit un élément de cache pour qu'il soit conservé plus tard |
saveMultiple(...$items) | bool | Conserve plusieurs éléments de cache immédiatement |
setEventManager(EventManagerInterface $evtMngr) | ExtendedCacheItemPoolInterface | Définit le gestionnaire d'événements |
dans la V8 : plusieurs stratégies ( $strategy
) sont désormais prises en charge pour le balisage :
TaggableCacheItemPoolInterface::TAG_STRATEGY_ONE
vous permet d'obtenir des éléments de cache par au moins UNE des balises correspondantes spécifiées. Comportement par défaut.TaggableCacheItemPoolInterface::TAG_STRATEGY_ALL
vous permet d'obtenir des éléments de cache par TOUTES les balises correspondantes spécifiées (l'élément de cache peut avoir des balises supplémentaires)TaggableCacheItemPoolInterface::TAG_STRATEGY_ONLY
vous permet d'obtenir des éléments de cache UNIQUEMENT par la ou les balises correspondantes spécifiées (l'élément de cache ne peut pas avoir de balises supplémentaires)Il prend également en charge plusieurs appels, le marquage et le dossier de configuration pour la mise en cache. Consultez nos dossiers d’exemples pour plus d’informations.
Phpfastcache fournit une classe qui vous donne des informations de base sur votre installation Phpfastcache
PhpfastcacheApi::GetVersion();
PhpfastcacheApi::getChangelog();
PhpfastcacheApi::getPhpfastcacheVersion();
PhpfastcacheApi::getPhpfastcacheChangelog();
Bonne nouvelle, depuis la V6, un adaptateur Psr16 est fourni pour garder le cache le plus simple possible en utilisant des getters/setters très basiques :
get($key, $default = null);
set($key, $value, $ttl = null);
delete($key);
clear();
getMultiple($keys, $default = null);
setMultiple($values, $ttl = null);
deleteMultiple($keys);
has($key);
Utilisation de base :
<?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
*/
En interne, l'adaptateur Psr16 appelle l'API Phpfastcache via le gestionnaire de cache.
Depuis la V6, Phpfastcache fournit un mécanisme événementiel. Vous pouvez vous abonner à un événement en passant une Clôture à un événement actif :
<?php
use Phpfastcache EventManager ;
/**
* Bind the event callback
*/
EventManager:: getInstance ()-> onCacheGetItem ( function ( ExtendedCacheItemPoolInterface $ itemPool , ExtendedCacheItemInterface $ item ){
$ item -> set ( ' [HACKED BY EVENT] ' . $ item -> get ());
});
Un rappel d'événement peut être dissocié, mais vous DEVEZ fournir un nom au rappel au préalable :
<?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 ' );
Depuis la V8, vous pouvez simplement vous abonner à chaque événement de Phpfastcache.
Plus d'informations sur la mise en œuvre et les événements sont disponibles sur le Wiki
Depuis la V6, Phpfastcache fournit quelques aides pour faciliter votre code.
Peut-être que d'autres viendront dans le futur, n'hésitez pas à contribuer !
Consultez le WIKI pour savoir comment implémenter la fonctionnalité de clustering de cache agrégé.
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
Pour les développeurs curieux, de nombreux autres exemples sont disponibles ici.
Vous avez rencontré un problème ou avez une idée ? Venez ici et faites-le-nous savoir !