Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Jak unieważnić części hierarchii (drzewa) danych w pamięci podręcznej Redis?

Są na to co najmniej 3 różne sposoby, z których każdy ma swoje zalety i wady.

Pierwsze podejście polega na użyciu nieatomowego skanowania ad-hoc drzewa w celu zidentyfikowania i unieważnienia (usunięcia) drugiego poziomu drzewa (1. zestaw dostosowań). Aby to zrobić, użyj hierarchicznego schematu nazewnictwa pól Hash i przeprowadź iterację za pomocą HSCAN . Na przykład zakładając, że nazwa klucza skrótu jest identyfikatorem produktu (np. ProduktA), użyjesz czegoś takiego jak „0001:0001” jako nazwy pola dla pierwszej wersji pierwszego dostosowania, „0001:0002” dla drugiej wersji i itd. Podobnie, „0002:0001” będzie drugą wersją dostosowania, pierwszą itd. Następnie znajdź wszystkie wersje dostosowania 42, użyj HSCAN ProductA 0 MATCH 0042:* , HDEL pola w odpowiedzi i powtarzaj, aż kursor wyzeruje się.

Odwrotnym podejściem jest proaktywne „indeksowanie” wersji każdego dostosowania, aby można było je efektywnie pobierać zamiast wykonywać pełne skanowanie skrótu. Sposobem na to jest użycie Zestawów Redis - zachowujesz Zestaw ze wszystkimi nazwami pól dla danej wersji produktu. Wersje mogą być sekwencyjne (jak w moim przykładzie) lub cokolwiek innego, o ile są unikalne. Kosztem jest utrzymanie tych indeksów — za każdym razem, gdy dodajesz lub usuwasz dostosowanie i/lub wersję produktu, musisz zachować spójność z tymi Zestawami. Na przykład tworzenie wersji wyglądałoby tak:

HSET ProductA 0001:0001 "<customization 1 version 1 JSON payload"
SADD ProductA:0001 0001

Zauważ, że te dwie operacje powinny być w jednej transakcji (tj. użyj MULTI\EXEC blok lub EVAL skrypt Lua). Gdy już to zrobisz, unieważnienie dostosowania to tylko kwestia wywołania SMEMBERS na odpowiednim Zestawie i usuwaniu zawartych w nim wersji z Hash (a także samego Zestawu). Należy jednak zauważyć, że czytanie wszystkich członków z dużego zbioru może być czasochłonne – 1K członków nie jest takie złe, ale dla większych zbiorów jest SSCAN .

Na koniec możesz rozważyć użycie Sorted Set zamiast Hash. Chociaż być może mniej intuicyjny w tym przypadku użycia, posortowany zestaw pozwoli ci wykonać wszystkie potrzebne operacje. Ceną za jego użycie jest jednak zwiększona złożoność O(logN) do dodawania/usuwania/odczytywania w porównaniu z O(1) skrótu, ale biorąc pod uwagę liczby, różnica nie jest znacząca.

Aby uwolnić moc Posortowanego Zestawu, użyjesz porządku leksykograficznego, aby wszyscy członkowie Posortowanego Zestawu mieli ten sam wynik (np. użyj 0). Każdy produkt będzie reprezentowany przez posortowany zestaw, tak jak w przypadku skrótu. Członkowie Set są odpowiednikami pola Hash, czyli wersjami dostosowań. „Sztuczka” polega na konstruowaniu członków w sposób, który pozwala na wyszukiwanie zakresu (lub unieważnienie poziomu 2, jeśli chcesz). Oto przykład, jak to powinno wyglądać (zauważ, że tutaj kluczem ProductA nie jest Hash, ale Sorted Set):

ZADD ProductA 0 0001:0001:<JSON>

Aby odczytać wersję dostosowania, użyj ZRANGEBYLEX ProductA [0001:0001: [0001:0001:\xff i podziel JSON z odpowiedzi i aby usunąć całe dostosowanie, użyj ZREMRANGEBYLEX .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Klient Java do podłączenia węzła pamięci podręcznej ElasticCache Redis

  2. Skrypt próbował utworzyć zmienną globalną

  3. Laravel:Jak sprawdzić dostępność Redisa?

  4. Konwencja nazewnictwa i prawidłowe znaki dla klucza Redis

  5. Odsłanianie Redisa za pomocą kontrolera Ingress Nginx