Redis コマンドを実行するには、Redis クライアントと Redis サーバーは次の手順を実行する必要があります:
クライアントはコマンドを To に送信します。サーバー;
サーバーはコマンド要求を受け入れ、コマンドを実行し、対応する結果を生成します。
サーバーは結果を次のサーバーに返します。クライアント;
クライアントはコマンドの実行結果を受け取り、それをユーザーに表示します。
Redis コマンドで消費される時間のほとんどは、コマンド リクエストの送信とコマンド結果の受信、任意の数の Redis コマンド リクエストをまとめてパッケージ化して、それらをすべて一度に送信することに費やされます。サーバーに送信されると、サーバーはすべてのコマンド要求を処理し、すべての実行結果を一度にクライアントに返します。
注:
Redis サーバーは、クライアントによってパイプラインに含まれるコマンドの数を制限しませんが、クライアントの入力バッファーのデフォルトのボリューム制限を 1 GB に設定します。クライアントによって送信されるデータの量がこの制限を超えると、Redis サーバーはクライアントを強制的に閉じます。したがって、同じパイプラインで多数のコマンドや非常に大規模なコマンドを一度に実行しないことが最善です。
さらに、多くのクライアントには暗黙的なバッファ サイズ制限もあります。パイプライン機能の使用時に一部のパイプライン コマンドが実行されない場合、またはパイプラインによって返された結果が不完全である場合は、おそらく、プログラムがクライアントの組み込みバッファ サイズ制限に達したことを示します。
SpringBoot 統合 Redis の例
単一のインクリメント コマンドを使用して 200 万のキーを処理します:
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>時間がかかります以下に示すように: これは 12 ビット、単位は ns<br></p><p><img src="https://img.php.cn/upload/article/000/887/227/168540959894676.png" alt="SpringBoot に Redis を統合してパイプラインを実装する方法"></p><p> パイプ incrBy を使用して 200 万個のキーを処理し、毎回 300 個のコマンドをパッケージ化して、それらを</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>
消費時間: 11 ビット、単位: ns、単一コマンドにかかる時間の 1/6。
以上がSpringBoot に Redis を統合してパイプラインを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。