Tradițional, pentru a stoca structuri complexe de date în Redis, dezvoltatorii serializau obiectele în șiruri JSON (JSON.stringify) salvate prin comenzi SET. Acest tipar genera o penalizare uriașă de performanță: pentru a modifica un singur câmp (ex: actualizarea soldului unui utilizator), întreaga structură trebuia descărcată pe rețea, deserializată, modificată, re-serializată și retransmisă pe server.
Modulul integrat RedisJSON stochează documente JSON direct în memorie într-un format binar arborescent optimizat, permițând citirea și manipularea atomică a oricărui câmp sau sub-arbore folosind expresii standard JSONPath.
# 1. Salvarea unui document JSON complet la rădăcină ($):
JSON.SET utilizator:101 $ '{
"nume": "Dexter",
"varsta": 32,
"email": "contact@dexblog.ro",
"abilitati": ["Go", "Redis", "Linux"],
"setari": {"tema": "dark", "notificari": true}
}'
# 2. Citirea unui singur câmp specific fără a transfera restul documentului:
JSON.GET utilizator:101 $.setari.tema
# Răspuns: "[\"dark\"]"
# 3. Mutație atomică directă asupra unei proprietăți numerice:
JSON.NUMINCRBY utilizator:101 $.varsta 1
# Răspuns: "[33]"
# 4. Adăugarea unui nou element în vectorul 'abilitati':
JSON.ARRAPPEND utilizator:101 $.abilitati '"Swift"'
# Răspuns: (integer) 4
Indexare Secundară și Căutare Vectorială cu RediSearch
Combinat cu RediSearch, Redis devine o bază de date documentar-vectorială capabilă de căutare full-text instantanee și potrivire de embeddings pentru AI (LLM / RAG):
# Crearea unui index secundar pe documente JSON:
FT.CREATE idx:utilizatori ON JSON PREFIX 1 utilizator: SCHEMA
$.nume AS nume TEXT
$.varsta AS varsta NUMERIC SORTABLE
$.abilitati[*] AS abilitati TAG
# Căutare complexă: toți utilizatorii care cunosc "Redis" și au vârsta >= 30:
FT.SEARCH idx:utilizatori "@abilitati:{Redis} @varsta:[30 +inf]"