Wsparcie JSON w Redis

Wsparcie JSON w Redis

Redis rozszerza swoje istniejące funkcje o obsługę zaawansowanego modułu. Wykorzystuje moduł RedisJSON do zapewnienia obsługi JSON w bazach danych Redis. Moduł RedisJSON zapewnia interfejs do odczytania, zapisywania i aktualizacji dokumentów JSON z łatwością.

RedisJson 2.0 zapewnia wewnętrzny i publiczny interfejs API, który może być konsumowany przez inne moduły, które znajdują się w tym samym węźle Redis. Daje to możliwość interakcji z modułem RedisJSON do interakcji z modułem Redisearch. Dzięki tym możliwościom baza danych Redis może być używana jako potężna baza danych zorientowana na dokument, taka jak MongoDB.

RedisJson nadal nie ma możliwości indeksowania jako bazy danych dokumentów. Rzućmy okiem na to, jak Redis zapewnia indeksowanie dokumentów JSON.

Indeksowanie obsługi dokumentów JSON

Jednym z głównych problemów RedisJSona jest to, że nie jest wyposażony w mechanizmy indeksowania wbudowanych. Redis musi obsługiwać indeksowanie za pomocą innych modułów. Na szczęście moduł Redisearch jest już tam, który zapewnia narzędzia indeksowania i wyszukiwania dla Hasze Redis. Stąd Redis wydał Redisearch 2.2, który obsługuje indeksowanie danych JSON opartych na dokumentach. Stało się to dość łatwe dzięki wewnętrznemu publicznemu API RedisJSona. Dzięki połączonemu wysiłkowi modułów RedisJSON i Redisearch baza danych Redis może przechowywać i indeksować dane JSON, a konsumenci mogą zlokalizować dokumenty JSON, zapytając treść, która sprawia, że ​​Redis jest wysoce działającą bazą danych zorientowaną na dokumenty.

Utwórz indeks z redisearch

Kradzież.Utwórz polecenie służy do utworzenia indeksu za pomocą redisearch. Słowo kluczowe ON JSON powinno być używane wraz z FT.Utwórz polecenie, aby poinformować Redisa, że ​​istniejące lub nowo utworzone dokumenty JSON muszą zostać zindykowane. Ponieważ RedisJson obsługuje JSONPATH (z wersji 2.0) część schematu tego polecenia można zdefiniować za pomocą wyrażeń JSONPATH. Do utworzenia indeksu JSON dla dokumentów JSON w sklepie danych Redis w sklepie danych Redis.

Składnia:

Ft.Utwórz name_of_index na schema JSON jsonPath_Expression jako [atrybut_name] data_type

Kiedy mapujesz elementy JSON na pola schematu, należy użyć odpowiednich typów pola schematu, jak pokazano następująco:

Element dokumentu JSON Typ pola schematu
Smyczki Tekst, geo, tag
Liczby Numeryczne
Boolean ETYKIETKA
Tablica liczb (JSON Array) Numeryczne, wektor
Tablica stringów (JSON Array) Tag, tekst
Tablica współrzędnych Geo (JSON Array) Geo

Ponadto wartości elementu zerowego i wartości zerowe w tablicy są ignorowane. Ponadto nie można indeksować obiektów JSON za pomocą redisearch. W takich sytuacjach użyj każdego elementu obiektu JSON jako oddzielnego atrybutu i zindeksuj je.

Proces indeksowania działa asynchronicznie dla istniejących dokumentów JSON, a nowo utworzone lub zmodyfikowane dokumenty są indeksowane synchronicznie na końcu polecenia „Utwórz” lub „aktualizacja”.

W poniższej sekcji omówmy, jak dodać nowy dokument JSON do sklepu Redis Data Store.

Utwórz dokument JSON z RedisJson

Moduł RedisJson zapewnia JSON.Set i Json.Polecenia arrappend w celu utworzenia i modyfikowania dokumentów JSON.

Składnia:

JSON.USTAWIĆ $

Przypadek użycia - indeksowanie dokumentów JSON zawierających dane pracownika

W tym przykładzie utworzymy trzy dokumenty JSON, które przechowują dane pracowników dla firmy ABC. Następnie dokumenty te są indeksowane za pomocą redisearch. Wreszcie, dany dokument jest zapytany za pomocą nowo utworzonego indeksu.

Przed utworzeniem dokumentów i indeksów JSON w Redis należy zainstalować moduły RedisJSON i Redisearch. Istnieje kilka podejść do zastosowania:

  • Redis Stack jest wyposażony w moduły RedisJson i Redisearch, które są już zainstalowane. Możesz użyć obrazu Docker Redis Stack, aby uruchomić i uruchomić bazę danych Redis, która składa się z tych dwóch modułów.
  • Zainstaluj Redis 6.X lub późniejsza wersja. Następnie zainstaluj RedisJson 2.0 lub późniejsza wersja wraz z Redisearch 2.2 lub późniejsza wersja.

Używamy stosu Redis do uruchomienia bazy danych Redis z modułami RedisJSON i Redisearch.

Krok 1: Skonfiguruj stos Redis

Uruchommy następujące polecenie Docker, aby pobrać najnowszy obraz Docker Redis Stack i uruchomić bazę danych Redis w pojemniku Docker:

UDO Docker Run -d -name Redis -Stack -Latest -p 6379: 6379 -p 8001: 8001 Redis/Redis Stack: najnowszy

Przypisujemy nazwę kontenera, Redis Stack-Latest. Ponadto wewnętrzny port kontenera 6379 jest odwzorowany na lokalny port maszyny 8001 również. Redis/Redis Stack: najnowszy Obraz jest używany.

Wyjście:

Następnie uruchamiamy Redis-CLI w stosunku do bazy danych Under Redis Container w następujący sposób:

Sudo Docker Exec -it Redis Stack-Latest Redis-cli

Wyjście:

Zgodnie z oczekiwaniami, rozpoczyna się monit Redis CLI. Możesz także wpisać następujący adres URL w przeglądarce i sprawdzić, czy stos jest stosowany: Redis:

Localhost: 8001

Wyjście:

Krok 2: Utwórz indeks

Przed utworzeniem indeksu musisz wiedzieć, jak wyglądają elementy dokumentu JSON i struktura. W naszym przypadku struktura dokumentu JSON wygląda na następujące:


„Nazwa”: „John Derek”,
„Wynagrodzenie”: „198890”,

Indeksujemy atrybut nazwy każdego dokumentu JSON. Do utworzenia indeksu służy następujące polecenie Redisearch:

Ft.Utwórz EmpNameIdx na schema JSON $.Nazwa jako tekst pracują

Wyjście:

Ponieważ Redisearch obsługuje wyrażenia JSONPATH z wersji 2.2, możesz zdefiniować schemat za pomocą wyrażeń JSONPATH jak w poprzednim poleceniu.

$.nazwa

NOTATKA: Możesz określić wiele atrybutów w jednym ft.Utwórz polecenie, jak pokazano w następujący sposób:

Ft.Utwórz empidx na schema JSON $.Nazwa jako Text AughEename $.wynagrodzenie jako pracownicy numeryczne

Krok 3: Dodaj dokumenty JSON

Dodajmy trzy dokumenty JSON za pomocą JSON.Ustaw polecenie w następujący sposób. Ponieważ indeks jest już utworzony, proces indeksowania jest synchroniczny w tej sytuacji. Nowo dodane dokumenty JSON są natychmiast dostępne w indeksie:

JSON.Ustaw EMP: 1 $ '„Nazwa”: „Harris Rauf”, „Wynagrodzenie”: 10000' '
JSON.Ustaw EMP: 2 $ '„Nazwa”: „Mark Wood”, „Wynagrodzenie”: 34000 ”
JSON.Ustaw EMP: 3 $ '„Nazwa”: „Mary Jane”, „wynagrodzenie”: 23000' '

Wyjście:

Aby dowiedzieć się więcej o manipulowaniu dokumentami JSON za pomocą Redisjson, zajrzyj tutaj.

Krok 4: Zapytaj danych pracowników za pomocą indeksu

Ponieważ już utworzyłeś indeks, wcześniej utworzone dokumenty JSON powinny być już dostępne w indeksie. Kradzież.Polecenie wyszukiwania może być używane do wyszukiwania dowolnego atrybutu zdefiniowanego w EMPNameIdx schemat.

Szukajmy dokumentu JSON zawierającego słowo „znak” w nazwa atrybut.

Ft.Wyszukaj EMPNameIdx '@Employeename: Mark'

Możesz także użyć następującego polecenia:

Ft.Wyszukaj EMPNameIdx '@EmployeName: (Mark)'

Wyjście:

Zgodnie z oczekiwaniami dokument JSON jest przechowywany w kluczu. EMP: 2 jest zwrócony.

Dodajmy nowy dokument JSON i sprawdź, czy jest on poprawnie indeksowany. JSON.Polecenie Set jest używane w następujący sposób:

JSON.Ustaw EMP: 4 $ '„Nazwa”: „Mary Nickolas”, „Wynagrodzenie”: 56000' '

Wyjście:

Możemy odzyskać dodany dokument JSON za pomocą JSON.Zdobądź polecenie w następujący sposób:

JSON.Zdobądź EMP: 4 $

NOTATKA: Składnia JSON.Get Command jest następujący:

JSON.DOSTAWAĆ $

Wyjście:

Uruchommy FT.Wyszukaj polecenie, aby wyszukać dokumenty zawierające słowo „Mary” w nazwa Atrybut JSON.

Ft.Wyszukaj empnameidx '@Employeename: Mary' '

Wyjście:

Ponieważ mamy dwa dokumenty JSON, które zawierają słowo Mary w nazwa atrybut, zwracane są dwa dokumenty.

Istnieje kilka sposobów wykonywania wyszukiwania i indeksowania za pomocą modułu redisearch, które zostały omówione w drugim artykule. Ten przewodnik koncentruje się głównie na przekazaniu przeglądu wysokiego poziomu i zrozumieniu indeksowania dokumentów JSON w Redis za pomocą modułów Redisearch i RedisJSON.

Wniosek

W tym przewodniku wyjaśnia, jak potężne jest indeksowanie Redis, w którym można zapytać lub wyszukać dane JSON w oparciu o jego zawartość z niskim opóźnieniem.

Połącz następujące linki, aby uzyskać więcej informacji na temat modułów RedisJSON i Redisearch:

  • RedisJson: https: // redis.IO/DOCS/STACK/JSON/
  • Redisearch: https: // redis.IO/Docs/Stack/Search/