🛢️

Upstash Redisを触ってみた

に公開

Upstashとは

Upstash は、サーバーレス向けのデータプラットフォームを提供するサービスです。Redis、Vector、QStash、Kafkaなどを展開しています。

Upstash Redisとは

Upstashが提供するサーバーレス向けRedisサービスです。

通常のRedisはTCP接続でアクセスしますが、Upstash RedisはHTTPベースのREST APIでアクセスします。そのため、Cloudflare Workersなどのエッジ環境でも利用でき、コネクションプールの管理も不要です。

主な特徴

1. HTTPベースのアクセス

REST APIでアクセスできるため、TCP接続が使えない環境でも利用可能です。

# curlで直接アクセスも可能
curl -H "Authorization: Bearer <TOKEN>" https://xxx.upstash.io/incr/count

@upstash/redis SDKを使えばより簡単です:

import { Redis } from '@upstash/redis';

const redis = new Redis({
  url: 'https://xxx.upstash.io',
  token: 'your-token',
});

// 普通のRedisコマンドが使える
await redis.set('key', 'value');
const value = await redis.get('key');

2. 従量課金制(月額上限あり)

プラン 料金 コマンド数 ストレージ
無料 $0 月500K 256MB
従量課金 100Kコマンドあたり$0.2 無制限 100GB
固定料金 $10/月〜 無制限 250MB〜

https://upstash.com/pricing/redis

3. グローバルレプリケーション

世界8リージョン以上にデータをレプリケート可能です。ユーザーに近いリージョンから低レイテンシでアクセスできます。

4. 見やすいダッシュボード

Upstash Consoleでは、コマンド数・帯域幅・ストレージ・コストが一目で確認できます。Write/Readの内訳や、上限に対する使用率もプログレスバーで表示されるため、利用状況の把握がしやすいです。

セットアップ(3ステップ)

1. アカウント作成

Upstash Console でアカウントを作成

2. データベース作成

コンソールから「Create Database」でRedisデータベースを作成

3. SDKをインストール

npm install @upstash/redis
import { Redis } from '@upstash/redis';

const redis = new Redis({
  url: process.env.UPSTASH_REDIS_REST_URL,
  token: process.env.UPSTASH_REDIS_REST_TOKEN,
});

以上で準備完了です。

ローカル開発環境の構築

本番環境はUpstashを使いつつ、ローカル開発では無料のRedisを使いたい場合があります。

hiett/serverless-redis-http を使えば、ローカルのRedisをUpstash互換のHTTP APIで公開できます。

Docker Composeでの設定例

version: '3'
services:
  redis:
    image: redis
    ports:
      - '6379:6379'

  serverless-redis-http:
    image: hiett/serverless-redis-http:latest
    ports:
      - '8079:80'
    environment:
      SRH_MODE: env
      SRH_TOKEN: example_token
      SRH_CONNECTION_STRING: 'redis://redis:6379'

コードの切り替え

import { Redis } from '@upstash/redis';

const redis = new Redis({
  url: process.env.NODE_ENV === 'production'
    ? process.env.UPSTASH_REDIS_REST_URL
    : 'http://localhost:8079',
  token: process.env.NODE_ENV === 'production'
    ? process.env.UPSTASH_REDIS_REST_TOKEN
    : 'example_token',
});

これで本番はUpstash、ローカルは通常のRedisという構成が実現できます。

参考リンク

GMOペパボ株式会社

Discussion