Redis 6.0.0 GA is out!

Salvatore Sanfilippo

Redis 6.0.0 GAがリリースされました!

原文は Salvatore Sanfilippo により に公開されました。 このブログを購読する

ついにRedis 6.0.0の安定版がリリースされました。今回は最初のリリース候補(RC)から安定版の正式リリースまでのサイクルが比較的短く、約4か月でした。決して短い期間ではありませんが、過去の記録と比べればそれほど長いわけではありません :)

大きな目玉は以前にお知らせした通りですが、いくつか注目すべき変更が加わっています。これまでの主な新機能は、SSL、ACL、RESP3、Client side caching、Threaded I/O、レプリカでのDisklessレプリケーション、Redis-benchmarkでのClusterサポートとredis-cliのClusterサポートの改善、RedisのモジュールとしてのDisque(ベータ版)、そしてRedis Cluster Proxy(現在はhttps://github.com/RedisLabs/redis-cluster-proxyで公開中)です。

では、RC1から今回の正式リリースまでに、安定性の向上以外に何が変わったのでしょうか?

1. Client side cachingは一部が再設計され、特にキャッシュスロット方式は廃止され、代わりにキー名をそのまま使う方式になりました。他のRedisコアチームのメンバーにも協力してもらい代替案を検討した結果、最終的にこちらの方式の方が優れているという結論に至りました。そのほか、この機能についてはバックログに残っていた要素もついに完成しました。特に「broadcastingモード」は、今後この機能で最もよく使われるモードの一つになると考えています。

broadcastingが使われる場合、サーバーは各クライアントがどのキーをリクエストしたかを記憶しなくなります。代わりにクライアントはキーのプレフィックスをサブスクライブし、そのプレフィックスに一致するキーが変更されるたびに通知を受け取ります。つまり、(選択したプレフィックスに対してのみ)メッセージ数は増えますが、サーバー側でのメモリ消費は不要になります。さらに、opt-in / opt-outモードにも対応したため、broadcastingモードを使わないクライアントは、キャッシュする対象をサーバーに正確に伝えることで、無効化メッセージの数を減らすことができます。基本的に、低メモリが求められる場合にも、帯域を絞りたい選択的な(低帯域)モードが求められる場合にも、機能は大きく改善されています。

2. これは以前から多くのユーザーから要望があった機能です。今回からRedisは、レプリケーションに使われるRDBファイルが不要になればすぐに削除するモードをサポートしました。特定の環境では、データをディスク上に残さず、メモリ上にのみ保持しておく方が望ましい場合があります。

3. ACLもいくつかの点で改善されました。まず、新しいACL LOGコマンドにより、ACLに違反したすべてのクライアントを確認できるようになりました。実行すべきでないコマンドへのアクセス、アクセス権のないキーへのアクセス、あるいは認証失敗などが対象です。ログはメモリ上に保持されるため、外部のエージェントが「ACL LOG」を呼び出すことで何が起きているかを確認できます。これはACL関連の問題をデバッグする際に非常に役立ちます。

ただ、私が最も気に入っているのはACL GENPASSの再実装です。現在はSHA256ベースのHMACを使用しており、生成したい推測困難な擬似乱数文字列のビット数をオプション引数で指定できるようになりました。Redisは起動時に/dev/urandomから内部キーをシードし、その後はHMACをカウンターモードで使って乱数を生成します。そのため、APIを何度呼び出しても処理は非常に高速です。アプリケーション用の推測困難なセッションIDを生成したい場合も、単にACL GENPASSを呼び出すだけで済みます。

4. レプリケーションプロトコルのPSYNC2も改善されました。プロトコル末尾のPINGをトリムできるようになったことで、レプリカとマスターが共通のオフセットを見つけやすくなり、部分的な再同期がより頻繁に成功するようになりました。

5. タイムアウト付きのRedisコマンドも大幅に改善されました。BLPOPなど、従来は秒単位しか受け付けなかったコマンドが小数での指定に対応しただけでなく、接続されているクライアント数にかかわらず、実際の分解能が現在の「HZ」値より悪化しないように改善されています。

6. RDBファイルの読み込みも高速化されました。ファイルの実際の構成(値の大きさなど)にもよりますが、20〜30%程度の改善が期待できます。また、多数のクライアントが接続されている場合のINFOも高速化されました。これは長年の課題でしたが、ようやく解消されています。

7. 新しいコマンドとしてSTRALGOが追加され、複雑な文字列アルゴリズムを実装しています。現時点で実装されているのはLCS(最長共通部分列)のみですが、これはコロナウイルスのRNAの比較(そして一般的に他の生物のDNAやRNAの比較)などにも使われる重要なアルゴリズムです。起きている事態はあまりにも大きく、Redisの中にも何らかの痕跡を残す必要があると感じました。

Redis 6は、これまでで最大のリリースです。安定版とはいえ、取り扱いには注意し、本番環境に投入する前に必ずご自身のワークロードでテストしてください。これまでのところ大きな問題は報告されていませんが、十分に注意してください。バグ報告が集まり次第、できるだけ早くRedis 6.0.1をリリースする予定です。

今回のリリースで共にコードを書いてくれた多くの方々、そして私の仕事(Redis Labsに感謝します)や他のコントリビューターの仕事(他の企業の皆様にも感謝します)を支援してくださった企業の皆様に、心から感謝します。また、時には退屈な修正後の再検証のプロセスにも丁寧に付き合いつつ、バグを報告してくださった多くの方々や、あらゆる改善を提案してくださった方々にも大きな感謝を贈ります。

いつも通り、Redis 6はさまざまな場所から入手できます。tarballはhttps://redis.ioで、GitHubリポジトリでは「6.0.0」タグとして公開されています。

Redis 6をお楽しみください。
antirez

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント