DEV Community

Cover image for Ajouter un cache en Python
Maxime Guilbert
Maxime Guilbert

Posted on

Ajouter un cache en Python

Quand on bosse sur des apis, notamment pour visualiser des informations, ça arrive rapidement qu'on ait plein d'appels identiques. Du coup, pour éviter une surutilisation inutile de nos ressources on peut mettre en place un cache directement dans notre api en Python.

Donc aujourd'hui, on va voir comment faire ça avec lru_cache.


Installation

Comme beaucoup de librairie python, lru_cache est disponible via pip.

PIP - Lru_cache : https://pypi.org/project/lru_cache/

pip install lru_cache
Enter fullscreen mode Exit fullscreen mode

Utilisation

from cache import LruCache  

@LruCache(maxsize=2, timeout=1)  
def foo(num):  
    return num  
Enter fullscreen mode Exit fullscreen mode

Comme vous pouvez le constater, son utilisation est très simple. Il s'agit d'une annotation à ajouter au dessus de la déclaration de la méthode que vous voulez cacher.

Paramètres

maxsize

maxsize correspond au nombre maximum d'appels différents de la méthode foo que l'on veut cacher en même temps.

Par appels différents, on entend qu'il y a au moins un paramètre qui change.

Exemple

foo(1) # Foo est appelé et le résultat est mis dans le cache
foo(1) # La valeur est directement retournée du cache
foo(2) # Foo est appelé et le résultat est mis dans le cache
foo(3) # Foo est appelé et le résultat est mis dans le cache à la place du résultat de 1 vu que la taille maximale du cache est 2.
foo(2) # La valeur est directement retournée du cache
Enter fullscreen mode Exit fullscreen mode

Si aucune valeur n'est donnée, alors toutes les informations seront cachées.

timeout

timeout correspond au nombre de secondes où le résultat d'un appel doit être conservée dans le cache.

foo(1) # Appel fait à 10:00:00 - La méthode est appelée et le résultat est stockée dans le cache
foo(1) # Appel fait à 10:00:00 - Le résultat vient du cache
foo(2) # Appel fait à 10:00:00 - La méthode est appelée et le résultat est stockée dans le cache
foo(2) # Appel fait à 10:00:00 - Le résultat vient du cache
foo(1) # Appel fait à 10:00:01 - Le résultat vient du cache
foo(1) # Appel fait à 10:00:02 - La valeur précédente du cache a expiré, la méthode sera donc appelée à nouveau et le résultat sera stocké dans le cache.
Enter fullscreen mode Exit fullscreen mode

Si aucune valeur n'est donnée pour ce paramètre, toutes les informations seront conservées jusqu'au redémarrage du service.


Invalider le cache

Si jamais vous avez besoin d'invalider une valeur dans le cache (rendre une valeur "invalide" dans le cache, forçant son remplacement au prochain appel), vous pouvez utiliser le traitement suivant:

foo.invalidate(num)
Enter fullscreen mode Exit fullscreen mode

Et voilà! En simplement quelques lignes, on a été capable de mettre en place un cache permettant d'améliorer les performances de notre api!

J'espère que ça vous aidera et si jamais vous avez des questions, quelles qu'elles soient (Il n'y a jamais de questions bêtes!) ou des points qui ne sont pas clairs pour vous, n'hésitez pas à laisser un message dans les commentaires ou à me joindre directement sur LinkedIn (même pour parler d'autres sujets!).


Vous voulez me supporter?

Buy Me A Coffee

Top comments (0)