2017-12-27 11 views
0

In Redis haben wir Strings, die Eingabewerte darstellen. Wir haben (möchten) ein Lua-Skript, das dynamisch generiert wird (nachdem es von einem Benutzer über eine GUI definiert wurde), der eine Ergebniszeichenfolge basierend auf der Eingabezeichenfolge berechnet. Jeder Satz von Eingabewerten ist unabhängig voneinander. Also sollte dies trivial parallelisierbar sein, jedoch scheint EVAL bis zur Fertigstellung zu blockieren.Wie führe ich ein einzelnes Lua-Skript gegen mehrere Redis-Werte parallel?

Gibt es einen Weg in Redis, ein einzelnes Lua-Skript über eine Reihe von Werten hinweg auszuführen, ohne das Skript selbst neu schreiben zu müssen?

Antwort

1

Da Redis als single-threaded Server implementiert ist, ist es nicht möglich, mehrere Befehle vom gleichen Client parallel auszuführen. Sie sollten jedoch in der Lage sein, mehrere Befehle (script Befehle enthalten) auf mehreren Clients auszuführen, und Redis wird sie in seiner E/A-Schleife verschachteln.

Nachdem gesagt, Redis ist nicht nur super-schnell, es ist auch flexibel; Bitte beachten Sie eine der folgenden Optionen:

  1. schreiben Redis selbst Modul, einen Befehl hinzufügen oder einen neuen Befehl zu Ihrem likings hinzuzufügen.
  2. Betrachten Sie eine Multi-Sharked-Umgebung. Dadurch kann jeder Rediserver (oder Shard) unabhängig ausgeführt werden, während Sie den Aufruf an den richtigen Shard weiterleiten können. Dies ist etwas arbeitsintensiv, wenn Sie diese Lösung in Betracht ziehen, lassen Sie es mich bitte wissen, ich kann Sie in dieser Angelegenheit weiter unterrichten.

Alles Gute!

+0

Hmm, das klingt, als müsste ich meine Reihen künstlich zerbrechen. Etwas wie berechnet die sha1 jeder Zeile, dann Modulo n, wobei n ist meine Anzahl von Shards und dann bekomme ich zumindest einige Last teilen auf diese Weise ... – ArtB

+0

Genau - noch genauer zu sein - einige Hash-Funktion auf dem _key_ von der Eintrag (berücksichtigen Sie nicht den Wert des Eintrags als Eingabe für den Hash), andernfalls muss das Paar (Schlüssel, Wert) möglicherweise migriert werden, wenn Sie den Wert aktualisieren. –

+0

Darüber hinaus gibt es einige Open-Source-Proxies, die dies für Sie out-of-the-Box, als auch eine kommerzielle tun. –

Verwandte Themen