sql >> Databáze >  >> NoSQL >> Redis

Existuje způsob, jak najít konkrétní klíč na konkrétní instanci redis v režimu clusteru?

Můžete, ale není to triviální. Za prvé, Redis používá složené závorky v klíči k určení jeho části shardingu, takže se můžete rozhodnout upravit klíč a poslat ho na libovolný fragment.

Nyní potřebujete dvě věci:

  1. Mapa toho, jaký fragment nebo rozsah slotů se nachází v které instanci redis.

  2. Způsob, jak zjistit, který řetězec se mapuje do kterého slotu, takže můžete vynutit "sharding string" na klíči, aby jej směroval do konkrétního fragmentu.

První je snadný - CLUSTER SLOTS dá vám tu mapu, stačí ji analyzovat.

Druhý je složitější - ale naštěstí jsem to už udělal. Vytvořil jsem tabulku nejkratšího možného mapování alfanumerických řetězců na každý z 16384 slotů v clusteru Redis. Nejsem v C, ale můžete to snadno převést na cokoliv. https://gist.github.com/dvirsky/93f43277317f629bb06e858946416f7e

Váš algoritmus by tedy měl mít klíč a požadovaný uzel:

  1. Podívejte se na mapu slotů a vezměte si rozsahy slotů, které se nacházejí v tomto uzlu.

  2. Vyberte slot v rozsahu tohoto uzlu.

  3. Hledejte v tabulce shardingu záznam tohoto slotu.

  4. Přiklepněte ten provázek složenými závorkami na klíč. např. převést foo do foo{e4x} .

A to je vše! Jakýkoli příkaz používající tento klíč bude směrován na daný fragment.

Pseudo-python verze:

# 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. Základy automatizace databáze MongoDB pomocí Chef

  2. Mongodb concat int a řetězec

  3. MongoDB $substrCP

  4. Mongodb agreguje (počítá) na více polích současně