Um einen Redis-Befehl auszuführen, müssen der Redis-Client und der Redis-Server die folgenden Schritte ausführen:
Der Client sendet den Befehl an den Server.
Der Server akzeptiert die Befehlsanforderung Führt den Befehl aus und erzeugt entsprechende Ergebnisse.
Der Server gibt die Ergebnisse an den Client zurück.
Der Client akzeptiert die Ausführungsergebnisse des Befehls und zeigt sie dem Benutzer an.
Die meiste Zeit, die der Redis-Befehl verbraucht, wird für das Senden von Befehlsanforderungen und den Empfang von Befehlsergebnissen, das Zusammenpacken einer beliebigen Anzahl von Redis-Befehlsanforderungen und das anschließende Senden aller auf einmal an den Server und schließlich an den Server ausgegeben Wenn Anfragen verarbeitet werden, werden alle ihre Ausführungsergebnisse auf einmal an den Client zurückgegeben.
Hinweis:
Der Redis-Server begrenzt nicht die Anzahl der vom Client in die Pipeline aufgenommenen Befehle, legt jedoch ein Standardvolumenlimit von 1 GB für den Eingabepuffer des Clients fest: wenn die vom Client gesendete Datenmenge diesen Wert überschreitet Wenn das Limit erreicht ist, wird der Redis-Server den Client zwangsweise schließen. Daher ist es am besten, nicht eine große Anzahl von Befehlen oder einige sehr große Befehle gleichzeitig in derselben Pipeline auszuführen.
Darüber hinaus haben viele Clients auch implizite Puffergrößenbeschränkungen. Wenn Sie feststellen, dass einige Pipeline-Befehle bei Verwendung der Pipeline-Funktion nicht ausgeführt werden oder die von der Pipeline zurückgegebenen Ergebnisse unvollständig sind, liegt möglicherweise ein Fehler in Ihrem Programm vor Die integrierte Puffergrößenbeschränkung des Clients.
SpringBoot-integrierte Redis-Instanz
Verwenden Sie einen einzelnen Inkrementierungsbefehl, um 2 Millionen Schlüssel zu verarbeiten:
public class RedisPipelineStudy extends BaseTest { @Autowired private StringRedisTemplate stringRedisTemplate; private static final String PREFIX = "test0:"; @Test public void test() { StopWatch stopWatch = new StopWatch(); stopWatch.start("test0"); for (int times = 0; times <p>Der Zeitverbrauch ist wie folgt: 12 Bit, Einheit ns<br></p><p><img src="https://img.php.cn/upload/article/000/887/227/168540959894676.png" alt="So implementieren Sie Pipelines durch die Integration von Redis in SpringBoot"></p><p> Verwendung Die Pipe incrBy verarbeitet 2 Millionen Schlüssel, packt jedes Mal 300 Befehle und sendet sie an den Server, wie unten gezeigt: </p><pre class="brush:php;toolbar:false">public class RedisPipelineStudy extends BaseTest { @Autowired private StringRedisTemplate stringRedisTemplate; private static final String PREFIX = "test1:"; @Test public void test() { StopWatch stopWatch = new StopWatch(); stopWatch.start("test1"); List<integer> recordList = new ArrayList(); for (int times = 0; times 300) { incrByPipeline(recordList); recordList = new ArrayList(); } } catch (Exception e) { System.out.println(e); } } if (!CollectionUtils.isEmpty(recordList)) { incrByPipeline(recordList); recordList = new ArrayList(); } } stopWatch.stop(); System.out.println(stopWatch.prettyPrint()); } private void incrByPipeline(List<integer> recordList) { stringRedisTemplate.executePipelined(new RedisCallback<object>() { @Override public Object doInRedis(RedisConnection connection) throws DataAccessException { try { for (Integer record : recordList) { byte[] key = (PREFIX + record).getBytes(); connection.incrBy(key, 1); } } catch (Exception e) { System.out.println(e); } return null; } }); } }</object></integer></integer>
Zeitverbrauch: 11 Bit, Einheit: ns, was 1/6 der von a benötigten Zeit entspricht einzelner Befehl.
Das obige ist der detaillierte Inhalt vonSo implementieren Sie Pipelines durch die Integration von Redis in SpringBoot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!