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

Czy istnieje sposób na zlokalizowanie określonego klucza w określonej instancji Redis w trybie klastra?

Możesz, ale to nie jest trywialne. Przede wszystkim Redis używa nawiasów klamrowych w kluczu, aby określić jego część na fragmenty, więc możesz zdecydować się na zmodyfikowanie klucza i wysłanie go do dowolnego fragmentu.

Teraz potrzebujesz dwóch rzeczy:

  1. Mapa tego, jaki fragment lub zakres slotów znajduje się w której instancji redis.

  2. Sposób na sprawdzenie, który ciąg jest mapowany do którego gniazda, dzięki czemu można wymusić „ciąg fragmentujący” na kluczu, aby skierować go do określonego fragmentu.

Pierwszy z nich jest łatwy - CLUSTER SLOTS da ci tę mapę, po prostu ją przeanalizuj.

Drugi jest trudniejszy - ale na szczęście już wykonałem tę pracę. Stworzyłem tabelę najkrótszego możliwego mapowania ciągów alfanumerycznych do każdego z 16384 gniazd w klastrze Redis. Jest w C, ale możesz go łatwo przekonwertować na cokolwiek. https://gist.github.com/dvirsky/93f43277317f629bb06e858946416f7e

Twój algorytm będzie miał klucz i pożądany węzeł:

  1. Spójrz na mapę slotów i weź zakresy slotów, które znajdują się w tym węźle.

  2. Wybierz gniazdo w zakresie tego węzła.

  3. Poszukaj w tabeli shardingu wpisu tego slotu.

  4. Uderz ten sznurek nawiasami klamrowymi na kluczu. np. przekonwertuj foo do foo{e4x} .

I to wszystko! Każde polecenie używające tego klucza zostanie przekierowane do tego fragmentu.

Pseudo-pythonowa wersja tego:

# Build this table from CLUSTER SLOTS or CLUSTER NODES
slots = {
   '127.0.0.1:7000': [(0, 1045),(2000,2100)]
   ...
 }

# Build this table from the C example:
sharding_table = ["06S", "Qi", "5L5", "4Iu", "4gY", ....]

def retarget_key(key, node):
    ranges = slots[node] 

    sharding_key = shading_table[ranges[0][0]]
    return '%s{%s}' % (key, sharding_key)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Diagnozowanie nieoczekiwanej awarii serwera redis

  2. zainstaluj redis na instancji aws micro

  3. Twisted:dlaczego przekazanie odroczonego wywołania zwrotnego do odroczonego wątku powoduje, że wątek nagle się blokuje?

  4. Udostępnianie magazynu sesji na Redis dla Django i aplikacji Express.js

  5. Nowicjusz aplikacji czasu rzeczywistego - Node.JS + Redis lub RabbitMQ -> klient/serwer jak?