Heroku Redis の Hobby 層のバージョンの非推奨化
最終更新日 2021年12月13日(月)
Table of Contents
2021 年 3 月 10 日より、Heroku Redis バージョン 4 および 5 を Hobby 層のプランの非推奨としてマークします。つまり、現在のユーザーはアドオンをバージョン 6 にアップグレードする必要があります。これはほとんどのユーザーにとって簡単な下位互換性のあるアップグレードであると予想されますが、この記事全体を読んでプロセスを理解し、バージョン間で大きな変更が発生する可能性があることを理解することをお勧めします。
ユーザーがアドオンを自発的にバージョン 6 にアップグレードしない場合は、2021 年 6 月 30 日の期限後に自動的にアップグレードされます。
スケジュール
イベント | 日付 |
---|---|
発表 | 2021 年 3 月 8 日 |
メールでのリマインダー | 期限まで 30 日ごと |
期限 | 2021 年 6 月 30 日 |
強制アップグレードの開始 | 2021 年 6 月 30 日 |
影響を受けるアドオン
- Hobby 層の Heroku Redis 4 (Hobby Dev)
- Hobby 層の Heroku Redis 5 (Hobby Dev)
移行する方法
最も速い方法
バージョン 6 を使用して新しい Heroku Redis アドオンを作成し、古いアドオンを破棄できます。
この方法は、古いアドオンのデータの内容を新しいアドオンに保持しません。
$ heroku addons:create heroku-redis:hobby-dev --app sushi
$ heroku addons:destroy <old-redis-haiku-name> --app sushi
# optionally attach as REDIS
$ heroku addons:attach <new-redis-haiku-name> --as REDIS --app sushi
より遅い方法
アップグレード間でデータを保持したい場合は、新しい Redis アドオンフォークを作成し、それをアプリケーションのメンテナンス中にプロモートする必要があります。バージョンのアップグレードプロセスについては、Heroku Redis Dev Center の記事に記載されています。
アドオン設定の更新
バージョン 6 を使用する Heroku Redis の hobby アドオンには、アプリの環境設定に発行された 2 つの接続文字列が表示されます。
REDIS_URL: redis://:password@hostname:port
REDIS_TLS_URL: rediss://:password@hostname:tls-port
プレーンテキストの REDIS_URL
を引き続き使用すると、バージョン 4 または 5 からバージョン 6 にアップグレードした後でも、期待どおりに機能します。ただし、すべてのクライアント接続に暗号化された REDIS_TLS_URL
を使用することをお勧めします。
将来的には、プレーンテキストの redis://
接続文字列は暗号化された rediss://
接続文字列に置き換えられます。ユーザーは、TLS 接続文字列をサポートおよび使用して、Heroku Redis アドオンへの安全なクライアント接続を確立するようにアプリケーションの設定を移行することをお勧めします。
現時点では、暗号化されたクライアント接続を確立するときは、証明書の検証をスキップする必要があります。言語固有のクライアント接続の詳細は、Dev Center の記事とヘルプセンターの記事を参照してください。
Redis 6 にアップグレードする際の大きな変更の可能性
4.0 から 5.0 への移行
当社では、平等に関する当社の価値観に適合するよう、インクルーシブでない用語を可能な範囲で変更しました。当社製以外のシステムに関する記述では、インクルーシブでない用語をそのまま使用していますが、当社では開発者コミュニティに対し、よりインクルーシブな表現の採用を奨励しています。該当する用語については、技術的な正確さのために必要でなくなった時点での更新を予定しています。
Redis 4.0 はほとんどが 5.0 の厳密なサブセットであるため、アプリケーションを 4.0 から 5.0 にアップグレードしても問題はありません。ただし、これは 5.0 リリースで導入された下位互換性のない小さな変更のリストです。
- redis-cli はクラスター管理ツールを実装するようになりました。古い redis-trib は引き続き出荷されますが、新しい修正は redis-cli でのみ実装されます。
詳細は、「
redis-cli --cluster help
」を参照してください。 - RDB 形式が変更されました。Redis 5.0 は引き続き 4.0 (および過去のすべてのバージョン) のファイルを読み取ることができますが、その逆はできません。
- 特定のログ記録の形式と文は、Redis 5.0 では異なります。
- 現在、デフォルトでは、maxmemory はスレーブによって無視され、スレーブがマスターにプロモートされたときにのみ使用されます。つまり、スレーブがマスターから独立した方法で maxmemory を強制する (とにかくキーエビクション DEL コマンドをストリーミングする) 設定では、この機能を手動でアクティブにし、書き込みが必ずしもべき等でない場合は一貫性が失われることを理解する必要があります。TLDR: 新しい動作は 99.999% のユースケースではるかに優れています。自分が何をしているかを本当に理解している場合は、元に戻してください。
- スクリプトは、その影響によってのみ複製され、EVAL/EVALSHA をスレーブまたは AOF ログ自体に送信することによっては複製されません。これは一般的なケースでははるかに優れており、将来的には、スクリプトを古い方法 (EVAL として) で伝播する他の可能性を完全に排除したいと考えています。ただし、文書化されていない (ここにない場合) Redis 設定ディレクティブ「lua-replicate-commands yes」または「DEBUG lua-always-replicate-commands 0」を使用して、これをデフォルトに戻すことができます。ただし、Redis 6 はそのような機能を完全に削除する可能性があることに注意してください。
- スクリプトの複製に関連する上記の変更により、Redis 4 で結果が redis.call() の戻り値を介して Lua に渡される前に辞書の順序で並べられた特定の Redis コマンドは、コマンドを通常のクライアントから直接呼び出すのと同様の動作になりました。たとえば、SMEMBERS または SDIFF によって返される要素の順序は、スクリプト以外のコンテキストからコマンドを呼び出すときのデフォルトとまったく同じように、Lua では未確定になりました。
出典: Redis 5 リリースノート
5.0 から 6.0 への移行
Redis 6.0 はほとんどが 5.0 の厳密なスーパーセットであるため、アプリケーションを 5.0 から 6.0 にアップグレードしても問題はありません。ただし、これは 6.0 リリースで導入された下位互換性のない小さな変更のリストです。
- 「SPOP count」コマンドは、設定されたキーが存在しない場合に null を返さなくなりました。現在は、0 引数で呼び出されたときに発生するように、空のセットが返されます。これは技術的には修正ですが、古い動作が変更されます。
出典: Redis 6 リリースノート