PSR 06 - Caching Interface

2 h Niveau 5

La mise en cache est un moyen courant d'améliorer les performances de tout projet, ce qui fait des bibliothèques d'implémentation l'une des caractéristiques les plus courantes de nombreux frameworks et bibliothèques. Cela a conduit à une situation où de nombreuses bibliothèques utilisent leurs propres bibliothèques d'implémentation, avec différents niveaux de fonctionnalité. Ces différences obligent les développeurs à apprendre à utiliser plusieurs systèmes qui peuvent ou non fournir les fonctionnalités dont ils ont besoin. En outre, les développeurs de bibliothèques d'implémentation sont eux-mêmes confrontés à un choix entre la prise en charge d'un nombre limité de frameworks ou la création d'un grand nombre de classes d'adaptateurs.

Une interface commune pour les systèmes de mise en cache résoudra ces problèmes. Les développeurs de bibliothèques et de frameworks peuvent compter sur le fait que les systèmes de mise en cache fonctionnent comme ils l'espèrent, tandis que les développeurs de systèmes de mise en cache n'auront à mettre en œuvre qu'un seul ensemble d'interfaces plutôt qu'un assortiment complet d'adaptateurs.

Objectif

L'objectif de ce PSR est de permettre aux développeurs de créer des bibliothèques compatibles avec le cache qui peuvent être intégrées dans des cadres et des systèmes existants sans qu'il soit nécessaire de procéder à un développement personnalisé.

Définitions

  • Bibliothèque d'appel - La bibliothèque ou le code qui a réellement besoin des services de cache. Cette bibliothèque utilisera les services de cache qui implémentent les interfaces de cette norme, mais n'aura autrement aucune connaissance de l'implémentation de ces services de cache.
  • Bibliothèque d'implémentation - Cette bibliothèque est responsable de l'implémentation de cette norme afin de fournir des services de mise en cache à toute bibliothèque d'appel. La bibliothèque d'implémentation doit fournir des classes qui implémentent les interfaces Cache\CacheItemPoolInterface et Cache\CacheItemInterface. Les bibliothèques d'implémentation doivent au minimum prendre en charge la fonctionnalité TTL décrite ci-dessous avec une précision de granularité de l'ordre de la seconde.
  • TTL (The Time To Live) - Le temps de vie d'un objet est le temps qui s'écoule entre le moment où cet objet est stocké et celui où il est considéré comme périmé. Le TTL est normalement défini par un entier représentant le temps en secondes, ou un objet DateInterval.
  • Expiration - Le moment réel où un article est prêt à être périmé. Elle est généralement calculée en ajoutant le TTL à l'heure à laquelle un objet est stocké, mais peut également être explicitement définie avec l'objet DateTime. Un objet avec un TTL de 300 secondes stocké à 1:30:00 aura une expiration à 1:35:00. Les bibliothèques d'application peuvent faire expirer un article avant l'heure d'expiration demandée, mais doivent traiter un article comme expiré une fois que l'heure d'expiration est atteinte. Si une bibliothèque appelante demande qu'un document soit enregistré mais ne spécifie pas d'heure d'expiration, ou spécifie une heure d'expiration nulle ou TTL, une bibliothèque d'implémentation peut utiliser une durée par défaut configurée. Si aucune durée par défaut n'a été définie, la bibliothèque d'implémentation doit l'interpréter comme une demande de mise en cache de l'élément pour toujours, ou aussi longtemps que l'implémentation sous-jacente le permet.
  • Clé - Une chaîne d'au moins un caractère qui identifie de manière unique un élément mis en cache. Les bibliothèques d'implémentation doivent prendre en charge les clés composées des caractères A-Z, a-z, 0-9, _, et . dans n'importe quel ordre en codage UTF-8 et d'une longueur maximale de 64 caractères. Les bibliothèques d'implémentation peuvent prendre en charge des caractères et des codages supplémentaires ou des longueurs plus importantes, mais doivent au moins prendre en charge ce minimum. Les bibliothèques sont responsables de leur propre échappement des chaînes de caractères clés selon le cas, mais doivent être en mesure de renvoyer la chaîne de caractères originale non modifiée. Les caractères suivants sont réservés aux extensions futures et ne doivent pas être pris en charge par les bibliothèques d'implémentation : {}()/\@:
  • Succès - Un succès de cache se produit lorsqu'une bibliothèque appelante demande un article par clé et qu'une valeur correspondante est trouvée pour cette clé, et que cette valeur n'a pas expiré, et que la valeur n'est pas invalide pour une autre raison. Les bibliothèques appelantes doivent s'assurer de vérifier isHit() sur tous les appels à get().
  • Échec - Un échec de cache est l'opposé d'un succès de cache. Un échec de cache se produit lorsqu'une bibliothèque appelante demande un élément par clé et que cette valeur n'a pas été trouvée pour cette clé, ou que la valeur a été trouvée, mais a expiré, ou que la valeur est invalide pour une autre raison. Une valeur expirée doit toujours être considérée comme un échec de cache.
  • Différé - Une sauvegarde différée du cache indique qu'un élément du cache ne peut pas être persisté immédiatement par le groupe. Un objet du groupe peut retarder la persistance d'un élément de cache différé afin de tirer parti des opérations de groupage prises en charge par certains moteurs de stockage. Un groupe doit s'assurer que tout élément de cache différé est finalement persisté et que les données ne sont pas perdues, et peut les persister avant qu'une bibliothèque appelante ne demande qu'ils soient maintenus. Lorsqu'une bibliothèque appelante invoque la méthode commit(), tous les éléments différés en suspens doivent être maintenus. Une bibliothèque d'implémentation peut utiliser n'importe quelle logique appropriée pour déterminer quand persister les éléments différés, comme un destructeur d'objets, la persistance de tous les éléments lors de la sauvegarde, une vérification du délai d'attente ou du nombre maximum d'éléments ou toute autre logique appropriée. Les demandes pour un élément de cache qui a été reporté doivent obligatoirement renvoyer l'élément reporté, mais pas encore conservé.

Données

logo discord

Besoin d'aide ?

Rejoignez notre communauté officielle et ne restez plus seul à bloquer sur un problème !

En savoir plus