Redis 6.0.0 GA is out!

Salvatore Sanfilippo

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

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

大きなニュースは以前に発表したものですが、いくつか注目すべき変更もあります。既報の内容は、SSL、ACL、RESP3、クライアントサイドキャッシュ、スレッド化I/O、レプリカでのディスクレスレプリケーション、Redis-benchmarkのクラスタサポートとredis-cliのクラスタサポート改善、Redisのモジュールとしてベータ版になったDisque、そしてRedis Cluster Proxyです(現在はhttps://github.com/RedisLabs/redis-cluster-proxyで公開されています)。

では、安定性以外に、RC1から今日までの間に何が変わったのでしょうか。

1. クライアントサイドキャッシュはいくつかの点で再設計されました。特に、キャッシュスロット方式は廃止し、単にキー名を使う方式に変更しました。他のRedisコアチームメンバーにも協力してもらい、選択肢を分析した結果、最終的にはこの方式のほうがよさそうだと判断しました。それ以外にも、この機能についてバックログに残っていた項目を実装し、ようやく完成しました。なかでも「ブロードキャストモード」は、この機能で最もよく使われるモードの一つになると私は考えています。

ブロードキャストを使う場合、サーバーは各クライアントがどのキーを要求したかを記憶しなくなります。その代わり、クライアントはキーのプレフィックスを購読します。プレフィックスに一致するキーが変更されるたびに、通知を受け取ることができます。つまり、メッセージ数は増えます(ただし、選択したプレフィックスに関するものだけです)が、サーバー側でメモリを消費する必要はありません。さらに、オプトイン/オプトアウトモードにも対応しました。これにより、ブロードキャストモードを使わないクライアントでも、何をキャッシュするのかをサーバーに正確に伝え、無効化メッセージの数を減らせます。要するに、メモリを節約したい場合にも、非常に選択的な(帯域幅を抑えた)モードが必要な場合にも、機能が大幅によくなりました。

2. これは多くのユーザーから以前から寄せられていた要望です。Redisは、レプリケーションに使うRDBファイルが不要になった時点ですぐに削除されるモードをサポートしました。環境によっては、データをディスク上に一切残さず、メモリ上だけに置くほうがよい場合があります。

3. ACLはいくつかの点で改善されました。まず、ACLに違反しているすべてのクライアントを確認できる新しいACL LOGコマンドが追加されました。実行を許可されていないコマンドやアクセスを許可されていないキーにアクセスしたクライアント、認証に失敗したクライアントを確認できます。ログは実際にはメモリ上に保持されるため、外部エージェントから「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(最長共通部分列)だけです。LCSは、コロナウイルスのRNA(そして一般に、ほかの生物のDNAやRNA)を比較する際などに使われる重要なアルゴリズムです。起きていることはあまりにも大きく、Redisの中に何らかの痕跡を残しておく必要がありました。

Redis 6は、これまでで最大のRedisリリースです。安定版ではありますが、慎重に扱い、本番環境に導入する前に自分のワークロードでテストしてください。これまでのところ大きな問題は確認されていませんが、十分に注意してください。バグ報告が集まり次第、できるだけ早くRedis 6.0.1をリリースできるよう準備します。

今回のリリースで私とともにコードを書いてくれた多くの方々、そして私の活動(Redis Labsに感謝します)と、ほかのコントリビューターの活動(支援してくださった各社に感謝します)を支援してくれたすべての企業に、心から感謝します。また、丁寧にバグを報告してくれた多くの方々にも感謝します。変更を加えたあとに再度確認するという退屈な手順に従ってくれた方々や、どのような形であれ改善案を提案してくれた方々にも感謝します。

いつものように、Redis 6はいくつかの場所から入手できます。https://redis.ioではtarballとして、Githubリポジトリでは「6.0.0」というタグで公開されています。

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

原文は Salvatore Sanfilippo により に公開されました。

この記事は「gpt-5.6-luna」を使用して翻訳されました。