Documentation Frappe Framework

Frappe Framework

Cache

Chaînes et hashes couvrent l’usage courant. Un calcul déterministe se range sous une clé unique, avec une durée de vie ou un effacement manuel.

2 min de lectureMis à jour le Source : docs.frappe.io

Rôle

Redis, en mémoire, accélère un calcul répété ou évite une lecture qui change peu. Bench le lance à part. Chaque worker s’y connecte par frappe.cache. Sur les anciennes versions, c’est frappe.cache(). Le Procfile le démarre avec le bench.

Types

Chaînes : set_value("key", "value") puis get_value. Hashes, comme des dictionnaires dont on met à jour un champ : hset("user|admin", "name", "Admin"), hget, hgetall.

frappe.get_cached_doc("System Settings") lit le document dans le cache, usage cité pour des réglages. L’invalidation est « best-effort ». doc.save ou frappe.db.set_value vide le cache du document. Une requête SQL brute ne le fait pas. À la main : frappe.clear_document_cache(doctype, name).

Calcul maison

slow_add dort une seconde puis additionne. La clé doit être unique, ici slow_addition|{a}+{b}. Si get_value renvoie une valeur, on la rend. Sinon on calcule et set_value. L’opérateur := est dans l’exemple.

Deux façons d’éviter le périmé : expires_in_sec=60*60 (une heure), ou delete_value. Pour un hash, hdel.

Décorateur

from frappe.utils.caching import redis_cache. @redis_cache sur slow_function : le premier appel de (40, 2) prend une seconde et renvoie 42, le suivant 897 µs. @redis_cache(ttl=60) expire au bout de 60 secondes. Sinon slow_function.clear_cache().

Installation

La config est dans {bench}/config/. Le Procfile contient redis_cache: redis-server config/redis_cache.conf. L’exemple : dbfilename redis_cache.rdb, répertoire et pid sous config/pids, bind 127.0.0.1, port 13000, maxmemory 737mb, politique allkeys-lru, appendonly no, save "". Seul maxmemory est à ajuster pour donner plus de mémoire. Le reste de la syntaxe est dans la doc Redis.

Détails

frappe.cache préfixe par le site : la même clé sur deux sites du bench fait deux entrées. Voir frappe.cache.make_key. pickle sérialise les objets complexes, donc pas de conversion à la main. pickle.

frappe.local.cache évite de rappeler Redis dans la même requête ou le même job. Les ajouts Frappe enveloppent le client dans frappe.utils.redis_wrapper.

Point d’attention

Une écriture SQL directe laisse un document en cache. Deux sites ne partagent pas les clés, malgré le même Redis.