Documente JSON Ierarhice și Căutare Vectorială în Redis (RedisJSON & RediSearch) în Redis & In-Memory Data Store

Structuri de Date Standard Redis

Ghid complet pentru modulele native RedisJSON și RediSearch: stocarea și interogarea documentelor ierarhice cu JSONPath, indexare secundară full-text și căutare vectorială (KNN) pentru modele de inteligență artificială.

Sintaxă comandă
JSON.SET doc $ '{...}' | JSON.GET doc $.field | FT.CREATE idx ON JSON ... | FT.SEARCH

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.

Manipularea Documentelor Ierarhice cu RedisJSON
# 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]"