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

Redis i wartości zapytań

Z pewnością modelowanie tych danych za pomocą Redis jest możliwe, ale musisz myśleć w kategoriach struktur danych ORAZ ścieżek dostępu. W przypadku Redis ścieżki dostępu nie są zarządzane niejawnie (jak w przypadku indeksów w RDBMS/MongoDB).

W podanym przykładzie możesz mieć:

user:<user hash> -> hash of user properties
user:<user hash>:sent -> set of <msg hash>
user:<user hash>:received -> set of <msg hash>
message:<msg hash> -> hash of message properties

Dodanie/usunięcie wiadomości oznaczałoby utrzymanie zestawów *:sent i *:received odpowiadających nadawcom i odbiorcom, oprócz dodawania/usuwania samego obiektu wiadomości.

Pobieranie wysłanych lub odebranych wiadomości dla danego użytkownika to tylko polecenie SMEMBERS lub SORT, jeśli chcesz jednocześnie pobrać właściwości wiadomości:

# Get a list of message hash codes only in one roundtrip
smembers user:<user hash>:received

# Get a list of message contents in one roundtrip
sort user:<user hash>:received by nosort get message:*->sender get message:*->message

Aby zapoznać się z uzasadnieniem korzystania z sortowania, zobacz:

  • Pobieranie wielu wartości klucza z Redis
  • Potrzebujesz pomocy w konceptualizacji w Redis/NoSQL

Uwaga 1: z Redis lepiej jest używać liczb całkowitych jako kluczy niż UUID lub kodów skrótu (szczególnie w zestawach), ponieważ są one przechowywane w bardziej wydajny sposób.

Uwaga 2: jeśli chcesz uporządkować wiadomości, to zamiast zestawów należy używać list. Konsekwencją jest to, że tylko najstarsze wiadomości mogą być usuwane, a tylko wiadomości z grupy newset mogą być dodawane w efektywny sposób. Prawdopodobnie chciałbyś również dodać globalną listę wszystkich wiadomości.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak odzyskać dane redis z migawki (pliku rdb) skopiowanego z innego komputera?

  2. Jak uzyskać DIFF na posortowanym zestawie?

  3. Jaki jest właściwy sposób obsługi połączenia Redis w Tornado? (Asynchroniczny — Pub/Sub)

  4. Redis Opublikuj/zasubskrybuj

  5. Jak stworzyć model we wzorcu DRY za pomocą flow.js (dla wywołań asynchronicznych) w node.js?