Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

UpstashのPipeline APIでサーバーレスRedisを高速化:複数コマンドを1リクエストで実行

Upstashは、ネイティブなRedis APIに加えてREST APIもサポートしており、開発者はサーバーレス関数やエッジ関数から接続の問題を気にせずRedisへアクセスできます。しかし、同じ関数内で複数のRedisコマンドを実行する場合、その回数だけデータベースへの呼び出しが発生してしまうという課題がありました。

そこで、コミュニティメンバーの一人である@MasterGates氏が、Discordチャンネルで素晴らしい提案をしてくれました。それが「Pipeline API」です。

UpstashのPipeline APIでサーバーレスRedisを高速化:複数コマンドを1リクエストで実行

Pipeline APIとは

Pipeline APIは、RedisのPIPELINEコマンドをREST API向けに適応させた機能です。複数のコマンドを1つのHTTPリクエストにまとめて送信すると、レスポンスも1つのリクエストとしてまとめて返却されます。これにより、RTT(ラウンドトリップタイム)の削減とソケットI/Oの低減が実現し、アプリケーションのパフォーマンスが大幅に向上します。

リクエストの構文は以下のとおりです。

curl -X POST https://us1-merry-cat-32748.upstash.io/pipeline \
-H "Authorization: Bearer 2553feg6a2d9842h2a0gcdb5f8efe9934" \
-d '
   [
     ["SET", "key1", "valuex"],
     ["SETEX", "key2", 13, "valuez"],
     ["INCR", "key1"],
     ["ZADD", "myset", 11, "item1", 22, "item2"]
   ]
   '

レスポンスは、送信したコマンドの順序に対応した配列として返されます。

[
  { "result": "OK" },
  { "result": "OK" },
  { "error": "ERR value is not an integer or out of range" },
  { "result": 2 }
]

上記の例のように、各コマンドの結果は個別にresultまたはerrorとして格納されるため、一部のコマンドが失敗しても全体の処理を把握しやすくなっています。

順序の保証とアトミック性について

Upstashでは、パイプライン内のコマンドが送信された順序どおりに実行されることを保証しています。ただし、注意すべき点として、アトミック性(原子性)は保証されません。他のクライアントから送信されたコマンドが、パイプラインのコマンド間に割り込んで実行される可能性があります。また、一部のコマンドが失敗した場合でも、残りのコマンドは引き続き正常に実行されます。

さらに、Pipeline APIにはもう一つ重要な制限があります。パイプライン内の各コマンドは互いに独立している必要があるという点です。つまり、あるコマンドの実行結果(レスポンス)を、同じパイプライン内の別のコマンドが利用するような使い方はできません。依存関係のある一連の処理を行いたい場合は、Luaスクリプトやトランザクションなど、他の手段を検討する必要があります。

まとめ

Pipeline APIを活用すれば、サーバーレス環境でのRedisアクセスにおけるネットワークオーバーヘッドを大幅に削減でき、アプリケーションの応答速度向上が期待できます。Upstash REST APIの詳細については、公式ドキュメントをご確認ください。私たちはユーザーの皆様からのフィードバックをもとにAPIの開発を継続的に進めています。ご意見・ご要望があれば、ぜひTwitterやDiscordでお聞かせください。

  1. Nuxt 3とサーバーレスRedis(Upstash)で始めるページ訪問カウント実装

    Nuxt 3とサーバーレスRedis(Upstash)で始めるページ訪問カウント実装 アプリケーションの利用状況を追跡したり、リソース利用を制限したり、キャッシュからデータを取得してパフォーマンスを向上させたりする必要がある場合、Redisがその答えとなります。Redisはインメモリのキー・バリュー型データベースであり、オープンソースで「Remote Dictionary Server」の略称です。 この記事では、サーバーレスRedisサービスであるUpstashと、Vue SSRフレームワークの最新ベータ版であるNuxt 3を組み合わせた基本的なアプリケーション構築を通じて、Redisの基礎

  2. サーバーレスデータベース徹底比較:DynamoDB vs Firestore vs MongoDB vs Cassandra vs Redis vs FaunaDB

    はじめに 本記事は、2021年4月に公開したブログ記事の続編です。 私たちは、一般的なWebユースケースとサーバーレス関数を用いて、主要なサーバーレスデータベースのパフォーマンスを比較するサンプルアプリケーションを構築しました。比較対象は、DynamoDB、MongoDB(Atlas)、Firestore、Cassandra(Datastax Astra)、FaunaDB、Redis(Upstash)の6つです。 アプリケーションおよびソースコードは公開しているので、ぜひご確認ください。 測定内容と方法 今回比較したのは、各データベースで上位10件のニュース記事を取得する際のレイテンシです。