Im Allgemeinen, nachdem der Redis -Client eine Anfrage ausgestellt hat, blockiert und wartet er normalerweise, bis der Redis -Server verarbeitet wird. Nachdem der Redis -Server die Verarbeitung abgeschlossen hat, wird das Ergebnis nach Anforderung des Befehls an den Client über die Antwortnachricht zurückgegeben.
Es fühlt sich so an, als wäre dies ein bisschen ähnlich wie der Scan von Hbase. Normalerweise erhält der Client jeden Datensatz und ruft den Server gleichzeitig auf.
Gibt es in Redis etwas Ähnliches wie das Caching des HBase -Scanners, das auf eine Anfrage mehrere Datensätze zurückgibt?
Ja, das ist Pipline. Offizielle Einführung http://redis.io/topics/pipelining
Wenn über Pipeline große Operationen vorhanden sind, können wir bei Netzwerkverzögerungen viel Zeit sparen. Es ist zu beachten, dass die Befehle mit Pipeline verpackt und gesendet werden. Redis muss die Verarbeitungsergebnisse aller Befehle vor dem Verarbeitung aller Befehle zwischenspeichern. Je mehr Befehle Sie packen, desto mehr Speicher verbrauchen Sie. Es ist also nicht so, dass die verpackteren Befehle besser sind.
Bei der Verwendung von Pipeline wurde die Leistung beim Lesen und Schreiben von Redis in Chargen erheblich verbessert.
Java hat es getestet:
Paket com.lxw1234.Redis; Import Java.util.hashMap; Import Java.util.map; Import Java.util.set; importieren rEIS.Clients.jedis.jedis; importieren. Redis = New Jedis ("127.0.0.1", 6379, 400000); Karte <string, string> data = new HashMap <String, String> (); Redis.Select (8); redis.flushdb (); // hmset long start = system.currentTimemillis (); // hmset für (int i = 0; i <10000; i ++) {data.clear (); Data.put ("k_" + i, "v_" + i); redis.HMSET ("KEY_" + I, Daten); } Long End = System.currentTimemillis (); System.out.println ("dbsize: [" + redis.dbsize () + "] .."); System.out.println ("HMSET ohne Pipeline verwendet [" + (Ende - Start) / 1000 + "] Sekunden .."); Redis.Select (8); redis.flushdb (); // Pipeline hmset pipeline p = redis.pipelined (); start = system.currentTimemillis (); für (int i = 0; i <10000; i ++) {data.clear (); Data.put ("k_" + i, "v_" + i); P.HMSET ("KEY_" + I, Daten); } P.Sync (); End = System.currentTimemillis (); System.out.println ("dbsize: [" + redis.dbsize () + "] .."); System.out.println ("HMSET mit verwendeter Pipeline [" + (Ende - Start) / 1000 + "] Sekunden .."); // hmget set <string> keys = redis.keys ("*"); // Jedis HGetall start = system.currentTimemillis () verwenden; Karte <String, Karte <String, String >> result = new HashMap <String, Karte <String, String >> (); für (String -Schlüssel: Schlüssel) {result.put (Schlüssel, redis.hgetall (key)); } end = system.currentTimemillis (); System.out.println ("Ergebnisgröße: [" + result.size () + "] .."); System.out.println ("HGetall ohne Pipeline verwendet [" + (Ende - Start) / 1000 + "] Sekunden .."); // Pipeline HGetAll Map <String, Antwort <map <String, String >>>> Antworten = new HashMap <String, Antwort <map <String, String >>> (keys.size ()); result.clear (); start = system.currentTimemillis (); für (String -Schlüssel: Schlüssel) {Antworten.put (Schlüssel, P.HGetall (Schlüssel)); } P.Sync (); für (String K: Antworten.Keyset ()) {result.put (k, Antworten.get (k) .get ()); } end = system.currentTimemillis (); System.out.println ("Ergebnisgröße: [" + result.size () + "] .."); System.out.println ("HGetall mit verwendeter Pipeline [" + (Ende - Start) / 1000 + "] Sekunden .."); redis.disconnect (); }} Die Testergebnisse sind wie folgt:
DBSIZE: [10000] .. HMSET ohne Pipeline verwendet [243] Sekunden .. DBSIZE: [10000] .. HMSET mit verwendeter Pipeline [0] Sekunden .. Ergebnisgröße: [10000] .. HGetall ohne Pipeline verwendet [243] Sekunden .. Ergebnisgröße: [10000] .. HGetall mit verwendeter Pipeline verwendet [0] verwendet [0] Sekunden.
Die Verwendung von Pipeline zum Lesen und Schreiben von 10.000 Datensätzen in Chargen ist ein Kinderspiel und es wird in Sekunden geschehen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.