Skip Navigation
Show nav
Heroku Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
View categories

Categories

  • Heroku のアーキテクチャ
    • Dyno (アプリコンテナ)
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • コマンドライン
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリー
    • 継続的統合
  • 言語サポート
    • Node.js
    • Ruby
      • Rails のサポート
      • Bundler の使用
    • Python
      • Python でのバックグランドジョブ
      • Django の使用
    • Java
      • Maven の使用
      • Java でのデータベース操作
      • Java の高度なトピック
      • Spring Boot の使用
    • PHP
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres Getting Started
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
    • Heroku Redis
    • Apache Kafka on Heroku
    • その他のデータストア
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
    • コンプライアンス
  • Heroku Enterprise
    • Private Space
      • インフラストラクチャネットワーキング
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
    • シングルサインオン (SSO)
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Integrating with Salesforce
  • データベースとデータ管理
  • Heroku Redis
  • Heroku Data for Redis への接続

Heroku Data for Redis への接続

日本語 — Switch to English

この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。

最終更新日 2022年11月17日(木)

Table of Contents

  • 接続のアクセス許可
  • 外部接続
  • Java での接続
  • Ruby での接続
  • Python での接続
  • Node.js での接続
  • PHP での接続
  • Go での接続

Heroku Data for Redis には、Heroku によってサポートされているすべての言語およびフレームワークを含むすべての言語から、Redis ドライバーでアクセスできます。また、独自の環境で実行されているクライアントから、Mini プランまたは Premium プランでホストされている Heroku Data for Redis にアクセスすることもできます。

接続のアクセス許可

すべての Heroku Data for Redis ユーザーに、CONFIG​、SHUTDOWN​、BGREWRITEAOF​、BGSAVE​、SAVE​、MOVE​、MIGRATE​、SLAVEOF​、DEBUG​ を除く Redis 内のすべてのコマンド​へのアクセス権限が付与されます。

外部接続

Heroku ランタイムから使用できることに加えて、Heroku Data for Redis の Mini プランと Premium プランのインスタンスには、ローカルコンピューターやその他の場所で実行されているクライアントからアクセスできます。

バージョン 6 より前の Redis では、SSL または他のメカニズムを使用してネットワーク経由でデータを暗号化することができません。Heroku Data for Redis にネイティブに、または stunnel​ を使用して安全に接続するための方法についての詳細は、「Heroku Data for Redis バージョン 4 と 5 のセキュリティ保護​」を参照してください。

外部システムまたはクライアントから接続するには、次のいずれかの方法を使用して Redis 接続文字列を取得します。

  • heroku redis:credentials​ CLI コマンドを実行する (詳細は、「redis:credentials)​」を参照)。
  • コマンド heroku config:get REDIS_URL -a example-app​ を実行して、アプリの環境設定を検査する

Java での接続

Heroku Data for Redis に接続するにはさまざまな方法がありますが、個々の方法は使用中の Java フレームワークに依存します。すべての接続方法では REDIS_URL​ 環境変数を使用して接続情報を調べます。

Spring Boot

Spring Boot の Redis に対するサポートでは、REDIS_URL​ などのすべての Redis 設定が自動的に選択されます。TLS ピアの確認を無効にするには、LettuceClientConfigurationBuilderCustomizer​ Bean を定義します。

@Configuration
class AppConfig {

    @Bean
    public LettuceClientConfigurationBuilderCustomizer lettuceClientConfigurationBuilderCustomizer() {
        return clientConfigurationBuilder -> {
            if (clientConfigurationBuilder.build().isUseSsl()) {
                clientConfigurationBuilder.useSsl().disablePeerVerification();
            }
        };
    }
}

Lettuce

このスニペットでは、REDIS_URL​ 環境変数を使用して、Lettuce​ を経由した Redis への接続を作成します。StatefulRedisConnection​ はスレッドセーフであるため、マルチスレッド環境で安全に使用できます。

 public static StatefulRedisConnection<String, String> connect() {
    RedisURI redisURI = RedisURI.create(System.getenv("REDIS_URL"));
    redisURI.setVerifyPeer(false);

    RedisClient redisClient = RedisClient.create(redisURI);
    return redisClient.connect();
}

Jedis

このスニペットでは、REDIS_URL​ 環境変数を使用して URI を作成します。この新しい URI は、Jedis​ を経由した Redis への接続を作成するために使用されます。この例では、Redis への 1 つの接続を作成します。

private static Jedis getConnection() {
    try {
        TrustManager bogusTrustManager = new X509TrustManager() {
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }

            public void checkClientTrusted(X509Certificate[] certs, String authType) {
            }

            public void checkServerTrusted(X509Certificate[] certs, String authType) {
            }
        };

        SSLContext sslContext = SSLContext.getInstance("SSL");
        sslContext.init(null, new TrustManager[]{bogusTrustManager}, new java.security.SecureRandom());

        HostnameVerifier bogusHostnameVerifier = (hostname, session) -> true;

        return new Jedis(URI.create(System.getenv("REDIS_URL")),
                sslContext.getSocketFactory(),
                sslContext.getDefaultSSLParameters(),
                bogusHostnameVerifier);

    } catch (NoSuchAlgorithmException | KeyManagementException e) {
        throw new RuntimeException("Cannot obtain Redis connection!", e);
    }
}

マルチスレッド環境 (Web サーバーなど) で Jedis を実行している場合は、同じ Jedis インスタンスを使用して Redis を操作しないでください。そうではなく、Jedis Pool を作成して、アプリケーションコードが Redis 接続をチェックアウトし、操作が終了したら接続をプールに返すようにしてください。

// The assumption with this method is that it's been called when the application
// is booting up so that a static pool has been created for all threads to use.
// e.g. pool = getPool()
public static JedisPool getPool() {
    try {
        TrustManager bogusTrustManager = new X509TrustManager() {
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }

            public void checkClientTrusted(X509Certificate[] certs, String authType) {
            }

            public void checkServerTrusted(X509Certificate[] certs, String authType) {
            }
        };

        SSLContext sslContext = SSLContext.getInstance("SSL");
        sslContext.init(null, new TrustManager[]{bogusTrustManager}, new java.security.SecureRandom());

        HostnameVerifier bogusHostnameVerifier = (hostname, session) -> true;

        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(10);
        poolConfig.setMaxIdle(5);
        poolConfig.setMinIdle(1);
        poolConfig.setTestOnBorrow(true);
        poolConfig.setTestOnReturn(true);
        poolConfig.setTestWhileIdle(true);

        return new JedisPool(poolConfig,
                URI.create(System.getenv("REDIS_URL")),
                sslContext.getSocketFactory(),
                sslContext.getDefaultSSLParameters(),
                bogusHostnameVerifier);

    } catch (NoSuchAlgorithmException | KeyManagementException e) {
        throw new RuntimeException("Cannot obtain Redis connection!", e);
    }
}
// In your multithreaded code this is where you'd checkout a connection
// and then return it to the pool
try (Jedis jedis = pool.getResource()){
  jedis.set("foo", "bar");
}

Ruby での接続

Ruby アプリケーションで Redis を使用するには、Gemfile​ に redis​ gem を含める必要があります。

gem 'redis'

bundle install​ を実行して、すべての依存関係をダウンロードして解決します。

Rails での接続

次のコードを含む config/initializers/redis.rb​ という名前のイニシャライザファイルを作成します。

$redis = Redis.new(url: ENV["REDIS_URL"], ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE })

Sidekiq からの接続

次のコードを含む config/initializers/sidekiq.rb​ という名前のイニシャライザファイルを作成します。

Sidekiq.configure_server do |config|
  config.redis = {
    url: ENV["REDIS_URL"],
    ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE }
  }
end

Sidekiq.configure_client do |config|
  config.redis = {
      url: ENV["REDIS_URL"],
      ssl_params: { verify_mode: OpenSSL::SSL::VERIFY_NONE }
  }
end

Python での接続

Python アプリケーションで Redis を使用するには、redis​ パッケージを使用する必要があります。

$ pip install redis
$ pip freeze > requirements.txt

コード内でこのパッケージを使用して REDIS_URL​ に接続します。

import os
import redis

r = redis.from_url(os.environ.get("REDIS_URL"))

Redis に TLS が必要な場合

import os
from urllib.parse import urlparse
import redis

url = urlparse(os.environ.get("REDIS_URL"))
r = redis.Redis(host=url.hostname, port=url.port, username=url.username, password=url.password, ssl=True, ssl_cert_reqs=None)

Django での接続

Django アプリケーションで Redis を使用するには、django-redis​ を使用する必要があります。

$ pip install django-redis
$ pip freeze > requirements.txt

settings.py​ で、CACHES​ を次のように設定します。

import os

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": os.environ.get('REDIS_URL'),
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

Redis に TLS が必要な場合

import os

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": os.environ.get('REDIS_URL'),
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {
                "ssl_cert_reqs": None
            },
        }
    }
}

Node.js での接続

redis モジュール

redis​ NPM モジュールを依存関係に追加します。

npm install redis

そして、このモジュールを使用して REDIS_URL​ に接続します。

const redis = require("redis");
const client = redis.createClient({url: process.env.REDIS_URL});

さらに、TLS を使用するように redis​ を設定します。

const redis = require("redis");

const client = redis.createClient({
  url: process.env.REDIS_URL,
  socket: {
    tls: true,
    rejectUnauthorized: false
  }
});

ioredis モジュール

ioredis​ NPM モジュールを依存関係に追加します。

npm install ioredis

そして、このモジュールを使用して REDIS_URL​ に接続します。

const Redis = require("ioredis");
const client = new Redis(process.env.REDIS_URL);

TLS を使用してクライアントを設定する場合は、次を使用できます。

const Redis = require("ioredis");

const client = new Redis(process.env.REDIS_URL, {
    tls: {
        rejectUnauthorized: false
    }
});

PHP での接続

redis 拡張機能を使用した接続

composer.json​ 内の要件に ext-redis​ を追加します。

"require": {
  …
  "ext-redis": "*",
  …
}

環境の REDIS_TLS_URL​ 環境設定を解析した後、Redis に接続します。

$url = parse_url(getenv("REDIS_TLS_URL"));
$redis = new Redis();
$redis->connect("tls://".$url["host"], $url["port"], 0, NULL, 0, 0, [
  "auth" => $url["pass"],
  "stream" => ["verify_peer" => false, "verify_peer_name" => false],
]);

Predis を使用した接続

composer.json​ で、predis​ パッケージを要件に追加します。

"require": {
  ...
  "predis/predis": "^1.1",
  ...
}

環境の REDIS_TLS_URL​ 環境設定を使用して Redis に接続します。

$redis = new Predis\Client(getenv('REDIS_TLS_URL') . "?ssl[verify_peer_name]=0&ssl[verify_peer]=0");

Go での接続

アプリケーションに Redigo​ パッケージを追加します。

$ go get github.com/gomodule/redigo/redis

パッケージをインポートします。

import "github.com/gomodule/redigo/redis"

REDIS_URL​ 設定変数を使用して Redis に接続します。

c, err := redis.DialURL(os.Getenv("REDIS_URL"),  redis.DialTLSSkipVerify(true))
if err != nil {
    // Handle error
}
defer c.Close()

関連カテゴリー

  • Heroku Redis
暗号化鍵を使用した Heroku Data for Redis の暗号化 Heroku Redis のメンテナンスウィンドウ

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Podcasts
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing

Subscribe to our monthly newsletter

Your email address:

  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Heroku Podcasts
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Facebook
  • Instagram
  • Github
  • LinkedIn
  • YouTube
Heroku is acompany

 © Salesforce.com

  • heroku.com
  • Terms of Service
  • Privacy
  • Cookies
  • Cookie Preferences