SpringBoot に Redis を統合してパイプラインを実装する方法

WBOY
リリース: 2023-05-30 09:19:56
転載
1423 人が閲覧しました

1. Redis パイプライン

Redis コマンドを実行するには、Redis クライアントと Redis サーバーは次の手順を実行する必要があります:

  • クライアントはコマンドを To に送信します。サーバー;

  • サーバーはコマンド要求を受け入れ、コマンドを実行し、対応する結果を生成します。

  • サーバーは結果を次のサーバーに返します。クライアント;

  • クライアントはコマンドの実行結果を受け取り、それをユーザーに表示します。

Redis コマンドで消費される時間のほとんどは、コマンド リクエストの送信とコマンド結果の受信、任意の数の Redis コマンド リクエストをまとめてパッケージ化して、それらをすべて一度に送信することに費やされます。サーバーに送信されると、サーバーはすべてのコマンド要求を処理し、すべての実行結果を一度にクライアントに返します。

注:

Redis サーバーは、クライアントによってパイプラインに含まれるコマンドの数を制限しませんが、クライアントの入力バッファーのデフォルトのボリューム制限を 1 GB に設定します。クライアントによって送信されるデータの量がこの制限を超えると、Redis サーバーはクライアントを強制的に閉じます。したがって、同じパイプラインで多数のコマンドや非常に大規模なコマンドを一度に実行しないことが最善です。

さらに、多くのクライアントには暗黙的なバッファ サイズ制限もあります。パイプライン機能の使用時に一部のパイプライン コマンドが実行されない場合、またはパイプラインによって返された結果が不完全である場合は、おそらく、プログラムがクライアントの組み込みバッファ サイズ制限に達したことを示します。

2. SpringBoot 統合 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 を統合してパイプラインを実装する方法

以上がSpringBoot に Redis を統合してパイプラインを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート