Cette librairie est développée sous forme d’un plugin pour SPIP, mais est codée de manière autonome, ce qui permet de l’utiliser indépendamment de SPIP.
Sa double licence — LGPL ou MIT, selon votre choix — permet de l’intégrer librement dans n’importe quel projet PHP.
Il suffit d’inclure le fichier inc/memoization.php
pour obtenir les fonctions suivantes :
mixed cache_me()
mixed cache_get(string key)
bool cache_set(string key, mixed value [, int ttl])
bool cache_isset(string key)
bool cache_unset(string key)
int cache_inc(string key [, int value [, int ttl] ])
int cache_dec(string key [, int value [, int ttl] ])
bool cache_lock(string key)
bool cache_unlock(string key)
Ces fonctions sont assurées par le module xcache
s’il est disponible, et dans le cas contraire par eaccelerator
, APC
, etc., voire même — au pire — par des méthodes utilisant le système de fichiers.
Ces fonctions sont très proches de ce que permet XCache. Comparé à XCache :
— on n’a pas conservé la fonction cache_unset_by_prefix
, très difficile à émuler sur les autres librairies ;
— on a en revanche ajouté les fonctions cache_lock()
et cache_unlock()
.
Interface de programmation (API)
mixed cache_me()
est la fonction de mémoïzation proprement dite, telle que je l’ai décrite, sous le nom W()
, dans un précédent article (« Utiliser xcache
pour accélérer n’importe quel script PHP »).
Pour « mémoïzer » une fonction définie comme :
il suffit de lui ajouter une ligne :
Les résultats sont alors mémoïzés et restitués, lors de l’exécution de la même fonction par la suite (et avec les mêmes arguments), sans devoir refaire les calculs ; cela fonctionne bien sûr au sein d’un même hit, mais aussi entre des hits successifs consécutifs. (Pour les cas où il est judicieux d’employer cette technique, se reporter à l’article initial.)
Les autres fonctions de l’API sont plus traditionnelles :
mixed cache_get(string key)
récupère la valeur stockée sous la clé $key
, ou null
si l’info n’est pas disponible ou a expiré.
bool cache_set(string key, mixed value [, int ttl])
stocke une valeur sous la clé $key
, avec une durée d’expiration de ttl
secondes (par défaut, pas d’expiration).
Renvoie true
en cas de succès, false en cas d'échec.
bool cache_isset(string key)
renvoie true
si la clé a une valeur disponible et non expirée, false
dans le cas contraire.
bool cache_unset(string key)
efface l’éventuelle valeur de la clé key
.
int cache_inc(string key [, int value [, int ttl] ])
ajoute value
(par défaut, value=1
) à la valeur numérique entière de la clé key
, règle, le cas échéant, le ttl, et renvoie le résultat.
int cache_dec(string key [, int value [, int ttl] ])
retire value
(par défaut, value=1
) à la valeur numérique entière de la clé key
, règle, le cas échéant, le ttl, et renvoie le résultat.
cache_lock(string key)
verrouille la clé key
, et assure l’unicité de notre accès à cette clé jusqu’à ce qu’on libère le lock, ou que le processus se termine.
cache_unlock(string key)
déverrouille la clé key
.
22 Messages de forum