このページはCalíope 1.7を紹介しています。私がいま作っているバージョンです。1.6は、Mac、iPad、iPhone、Apple Watch、Apple TV、Apple Vision Pro向けにApp Storeで公開中です。それぞれの機能がどのバージョンで入ったかは変更履歴に書いてあります。

すべてのトピックに「Calíopeで開く」ボタンを追加します。アプリがインストールされている場合にのみ機能します。

Redis

キーをブラウズ

Redisサーバのキーを走査し、読み、編集する方法です。

場所: ワークスペース › ツール › キー

対象: Redis Valkey 8.0+

ブラウザの左側にはデータベースのキーがプレフィックスごとにまとめて表示され、右側には選んだキーの詳細が表示されます。

キーの走査のしかた
CalíopeはキーをSCANでバッチごとに取得し、KEYSは決して使いません。KEYSはデータベース全体を一度に走査し、Redisはコマンドを1つずつ処理するので、実行中はほかの誰にも応答しません。フッタには、走査したキーの数と、走査が終わったのかまだキーが残っているのかが表示されます。「さらにキーを読み込む」で次のバッチを取得します。クラスタでは各プライマリノードを走査し、フッタには応答したノードの数が表示されます。欠けているノードがあれば、その名前と理由が表示されます。

上部のフィールドはMATCHのパターン(app:*、*:1001)で、内容による検索ではありません。入力を止めるとすぐにサーバが適用します。

グループはCalíopeのもので、サーバのものではありません
Redisにはフォルダがありません。どのキーも階層のない1つの名前です。グループは、ツールバーの「区切り文字」メニューで選んだ文字(:、/、.、|、または「なし:フラットなリスト」)で名前を区切って作られたもので、サーバはそれについて何も知りません。区切り文字はセッションごとに選び、各グループにはそこに属するキーの数が表示されます。キーボードでは、矢印キーで一覧を移動し、→と←で選択したグループを開閉します。iPhoneでは、キーをタップするとその詳細が開きます。

型と有効期限
各キーには、記号と名前による型と、有効期限が付いていて、有効期限は詳細の中でカウントダウンされます。「有効期限なし」と「もう存在しません」は同じではありません。前者は誰かが削除するまで残るキーで、後者は走査したあとに期限切れになったか、ほかのクライアントが削除したキーです。

詳細
キー、型、有効期限の下には、サイズ(バイト単位の「長さ」、「フィールド」または「要素」)、「内部エンコーディング」、「メモリー」が続き、そのあとに「値」が表示されます。サイズは内容より先に問い合わせます。大きな値は分割して読み、ボタンで次の部分を読み込みます。リストでは各要素に「インデックス」が付きます。Redisでは位置もデータの一部だからです。セットには順序がないことが表示されます。ソート済みセットでは、各「メンバー」がその「スコア」と並んで、小さい順に表示されます。ストリームでは、まずストリーム自体のデータ(最初と最後のエントリー、最後に生成されたID、削除された最大のID)、次にコンシューマグループとその保留中のエントリーと遅延、最後に「エントリー」が表示されます。UTF-8でない値は16進数で表示され、制御文字はエスケープされます。

編集できるもの
選択したキーについて、ツールバーと一覧のコンテキストメニューから:「有効期限…」(キーに有効期限がある場合は「有効期限を解除」)、「名前を変更…」(その名前がすでにあれば警告し、相手のキーを上書きするのは「置き換える」のときだけです)、「キーを削除…」(必ず確認し、キー、型、サイズを示します)。Deleteキーでも同じ確認になり、Mac以外では行を左にスワイプしても同じです。

値については:文字列では「値を編集…」(有効期限はそのまま残ります)、ハッシュでは「フィールドを追加…」、「編集…」、「削除」、リストでは位置ごとの「編集…」、セットでは「メンバーを追加…」と「削除」、ソート済みセットでは「メンバーを追加…」、「編集…」(スコアを変えます)、「削除」です。最後の要素を取り除くと、空になったキーはRedisが削除することが警告されます。変更はすべて、一覧を再読み込みせずにその場で反映され、Calíopeが実行したもののログに記録されます。

バイナリの値、64 KiBを超える値、ストリームは編集できません。また、データベースを空にすることも、パターンで削除することもできません。キーは1つずつ、どれかをわかったうえで削除します。

Calíope 1.4で開いたプロファイル
まだCalíope 1.4を使っているデバイスに同期されたRedisのプロファイルは、そこでは同じポートのMariaDBとして読み込まれます。そのバージョンはRedisを知らないからです。そのデバイスで保存すると、お使いのすべてのデバイスでその形に書き換えられます。プロファイルでもう一度Redisを選べば元に戻ります。サーバもパスワードも失われません。

環境タグがある場合
プロファイルのタグが読み出し専用なら、ブラウザは有効期限、名前の変更、削除を表示せず、ビューアも編集、追加、取り除くを表示しません。読むことしかできません。タグが書き込みの確認を求めるものなら、変更のたびに、タグを前に出して先に確認します。もともと確認していた削除と取り除くは、その確認の中でタグを示し、二度は確認しません。

キーワード: Redis、キー、ブラウズ、SCAN、TTL、有効期限、区切り文字、編集、削除

サーバの状態

Redisのサーバパネルに表示される内容と、各数値の読み方です。

場所: ワークスペース › ツール › サーバ

対象: Redis Valkey 8.0+

このパネルは、INFOが公開するとおりのRedisサーバの状態を表示します。画面に表示されているあいだは2秒ごとに自動で読み直し、「更新」ですぐに読み直します。各数値の下には、その出所となるINFOのフィールドが表示されるので、redis-cliと照らし合わせられます。

6枚のカード
「使用メモリー」はused_memoryで、上限(maxmemory)と割合が表示されます。maxmemoryが0なら、上限なしと表示されます。その下には、いっぱいになったときにサーバがどうするかと、ピーク値が表示されます。

「断片化」は、プロセスがシステムから確保しているメモリーを、使っているメモリーで割ったものです。1を超えると、プロセスは使っている以上に確保しています。メモリーアロケータがまだ返していない隙間です。1を下回るときは、たいていデータの一部がスワップにあり、そのほうが悪い状態です。

「ヒット率」と「期限切れのキー」は、最後に読んだときからではなく、サーバの起動時からの累計です。比率がほとんど動かなくても、今ミスがないとは限りません。期限切れのキーは、メモリー不足で追い出されたキーと一緒に表示されます。

「接続中のクライアント」はmaxclientsと比べた値で、サーバがCONFIGを許可していない場合は表示されません。redis-cliと照らし合わせると、そちらでは1つ多くなります。redis-cli自身の分です。

「1秒あたりの操作数」はCalíopeではなくサーバが計算したもの(instantaneous_ops_per_sec)で、刻々と変わります。

メモリーやクライアントが上限の90%を超えると、カードには色だけでなく記号付きで「上限に近づいています」と表示されます。

永続化
AOFがオンかどうか、どのRDB保存が予定されているか(save)、最後の保存がいつだったか(日付、時刻、タイムゾーン付き)、保存されていない変更がいくつあるかを示します。失敗した保存は、記号付きで失敗として表示されます。AOFがオフで、保存も予定されていない場合、カードにはそのことだけが表示されます。サーバが再起動するとすべてのデータを失うからです。ディスクからダンプを読み込んでいる最中なら、まずそのことが表示されます。読み込みが終わるまで、数値は稼働中のサーバのものではありません。

Pub/Sub
読み込むたびに取るスナップショットで、ストリームではありません。Calíopeはどのチャネルにもサブスクライブせず、メッセージも表示しません。今サブスクライバのいるチャネルとその数、そしてパターンのサブスクリプションを一覧表示します。サーバがこの接続にPUBSUBの使用を許可していない場合は、カードにそう表示されます。

サーバ
フッタには、製品名を前に付けたバージョン、モード、ロール、プロトコル(RESP2またはRESP3)、稼働時間が表示されます。クラスタでは、パネルは1つのノードについてのもので、フッタにそのノードの名前が表示されます。

Valkey

Valkeyでは、バージョンはvalkey_versionから取ります。そこではredis_versionには互換性のための番号(7.2.4)が入っていて、サーバのものではありません。モードはserver_modeから取ります。Valkeyはredis_modeを公開しないからです。

キーワード: Redis、サーバ、INFO、メモリー、断片化、ヒット、期限切れ、クライアント、操作、永続化、AOF、RDB、PUBSUB

メモリーを分析

メモリーアナライザが何を測り、サーバにどれだけ負荷をかけるか、そしてその合計がused_memoryと一致しない理由です。

場所: ワークスペース › ツール › メモリー

対象: Redis Valkey 8.0+

「分析」は、データベースのキーをSCANで走査し、MEMORY USAGEで1つずつ測り、測った値をプレフィックスごとに合計します。名前はブラウザと同じ区切り文字(別のものを選んでいなければ:)で区切ります。サーバはこのグループのことを知りません。作っているのはCalíopeです。

負荷について
測定はキー1つにつき1回の読み取りで、大きなデータベースでは、コマンドを1つずつ処理するサーバにとって実際の負荷になります。そのため、走査はページごとに進み、上限があり、途中で止められます。上限は分析の前に、「分析」の隣にある上限のメニューで選びます。10,000から5,000,000キーまでで、変えなければ500,000です。実行中はボタンが「停止」になり、これはアクティビティパネルにもあります。タブやセッションを閉じても止まります。終わるまでは、前回の分析が画面に残ります。クラスタでは、すべてのプライマリを走査して合計します。

正確な数ではなく推定値
文字列は正確に測られます。リスト、ハッシュ、セット、ソート済みセット、ストリームはサンプリングで測られます。サーバは5つの要素を見て残りを推定します(SAMPLES 5)。分析が上限で止まった場合や、自分で止めた場合は、画面に文字と記号でサンプルであることが警告されます。

グリッド
「プレフィックス」、「メモリー」、「キー」、「割合」:割合はデータベースのものではなく、測ったものに対する割合です。隣の並べ替えのメニューで、メモリーまたはキーの多い順に並べ替えます。グリッドに列を並べる余裕があれば、列のヘッダをクリックしても並べ替えられます。積み重ねて表示しているときは、ヘッダは描かれません。グループはシェブロンで開きます。キーボードでは→と←でも開閉できます。上部の数値は、それが何なのか(測ったキーがどれだけ使っているか)を常に示し、その下に、それがデータベースのすべてのキーなのか(DBSIZE)を示します。

合計がused_memoryと一致しない理由
キーの合計は、サーバが使っていると言うメモリー(used_memory)より常に少なく、それは測定の誤りではありません。used_memoryには、サーバ自身が使う分(空のサーバでもすでに約1 MBを使います:used_memory_startup)、クライアントとレプリケーションのバッファ、そしてすべてのデータベースのキーも含まれます。一方、分析が走査するのはセッションのデータベースだけです。いちばん近い数値は固定部分を除いたused_memory_datasetですが、それにもほかのデータベースが含まれます。キーが少ないと差は非常に大きく、多いと合計は近づきます。

キーワード: Redis、メモリー、アナライザ、MEMORY USAGE、SCAN、プレフィックス、サンプリング、used_memory、上限、停止

スローコマンド

Redisのスローコマンドログに何が記録されるか、しきい値がマイクロ秒単位である理由、そして消去すると何が起こるかです。

場所: ワークスペース › ツール › スローログ

対象: Redis Valkey 8.0+

サーバは、実行にしきい値より長くかかったコマンドをすべて記録し(SLOWLOG)、このタブはその記録を表示します。所要時間はサーバ自身の処理時間で、ネットワークやキューでの待ち時間は含みません。タブは表示されているあいだ5秒ごとに自動で読み直し、「更新」ですぐに読み直します。

しきい値はマイクロ秒単位です
Redisでは、しきい値(slowlog-log-slower-than)はほかのエンジンのような秒やミリ秒ではなく、マイクロ秒で書きます。10,000 µsは10 msで、これがRedisの出荷時の値です。上部の「サーバのログ」のカードは、それを文章で示し、あわせて保持するエントリーの数(slowlog-max-len、誰も変えていなければ128)も示します。しきい値が0なら、速いものも含めてすべてのコマンドが記録されます。負の値ならログはオフになり、そのときは空の一覧がそう表示します。それは「しきい値を超えたコマンドはありません」とは違います。クラスタでは、カードにノードの名前が表示されます。各ノードはそれぞれのログを持っていて、表示されるのはプロファイルのノードのものです。

履歴ではなく、ある期間の記録
ログには最新のエントリーだけが残ります。ログがいっぱいのときに新しいエントリーが来ると、いちばん古いものが消えます。見えているのはサーバが今持っているもので、起動してから遅かったものすべてではありません。

設定を変える
「設定を変更…」で、「記録する内容」(「しきい値を超えるもの」、「すべて」または「なし」)、「しきい値(µs)」、「保持するエントリー数」を含むシートが開きます。設定はCONFIG SETで書き込んでから読み直し、そのあとに表示されるのはサーバが持っていると言う値です。設定ファイルには保存されないので、再起動するとそのファイルの内容に戻ります。

一覧
Macでは「開始時刻(サーバの時計)」、「所要時間」、「コマンド」、「クライアント」(最後のものは、サーバがクライアントを送ってくる場合だけ)の列があるグリッドで、ヘッダをクリックすると並べ替えます。Mac以外では一覧で、順序はツールバーの並べ替えのメニューで選びます:「新しい順」または「遅い順」。「コマンドまたはクライアントで絞り込む」のフィールドは、サーバに問い合わせ直さずに、すでに読み込んだものを絞り込みます。サーバは各コマンドの引数を最大32個まで保持し、それぞれを128バイトに切り詰め、そのことをコマンドの中に書きます(... (N more arguments))。Calíopeはそれをそのまま表示します。AUTHは伏せ字になります。

エントリーの詳細
エントリーを選択すると(Macではグリッドの下に、Mac以外ではタップするとシートに表示されます)、コマンド全体、タイムゾーン付きの時刻(時計はサーバのもの)、msとµsでの所要時間、クライアントのアドレスと名前、エントリーの番号が表示されます。「コマンドをコピー」でコピーし、「コンソールで開く」で実行せずにコンソールに入力した状態で残します。どちらもコンテキストメニューにあり、Macではダブルクリックかreturnキーでコンソールが開きます。

消去
ツールバーの「ログを消去」は、サーバ上のすべてのエントリーを削除します(SLOWLOG RESET)。その前に、消える件数をその時点でSLOWLOG LENで数えて示し、確認します。この操作は取り消せません。

環境タグがある場合
プロファイルのタグが読み出し専用なら、「設定を変更…」と「ログを消去」はありません。設定とエントリーは読むだけで、変更はできません。タグが書き込みの確認を求めるものなら、設定を変えるときはタグを前に出して先に確認し、消去ではその確認の中でタグを示します。

キーワード: Redis、SLOWLOG、スローコマンド、しきい値、マイクロ秒、SLOWLOG-LOG-SLOWER-THAN、SLOWLOG-MAX-LEN、CONFIG SET、消去、コンソール

接続中のクライアント

Redisサーバに誰が接続しているか、接続時間、アイドル時間、フラグが何を意味するか、そしてクライアントの接続を解除すると何が起こるかです。

場所: ワークスペース › ツール › クライアント

対象: Redis Valkey 8.0+

このタブにはCLIENT LISTの応答が表示されます。サーバに対して開いているすべての接続で、アプリケーションからのものも、redis-cliからのものも、Calíope自身のものも含まれます。一覧は画面に表示されているあいだ5秒ごとに自動で読み直し、「更新」ですぐに読み直します。「名前、アドレス、コマンドで絞り込む」のフィールドは、サーバに問い合わせ直さずに、すでに読み込んだもの(名前、アドレス、最後のコマンド、ユーザ、ライブラリ、ID)を絞り込みます。クラスタでは、一覧はプロファイルのノードのもので、そのことが通知で示されます。各ノードにはそれぞれのクライアントがいるからです。

列
Macでは「クライアント」、「ID」、「アドレス」、「接続時間」、「アイドル」、「データベース」、「最後のコマンド」、「フラグ」、「メモリー」の列があるグリッドで、ヘッダをクリックすると並べ替えます。「ユーザ」と「ライブラリ」は、それを持つ接続があるときだけ表示されます(ACLのユーザはRedis 6から、ライブラリはRedis 7.2から存在し、クライアントが名乗った場合だけです)。Mac以外では、各クライアントが同じデータにラベルを付けた1行になり、順序はツールバーの並べ替えのメニューで選びます:「ID順」、「アイドル時間の長い順」、「接続の新しい順」、「メモリー使用量の多い順」。

接続時間とアイドル時間は同じではありません
「接続時間」(age)は接続を開いてからの秒数を、「アイドル」(idle)は最後のコマンドからの秒数を数えます。プールの接続は、何時間も接続していて数秒しかアイドルになっていません。長いあいだアイドルの接続は、何もせずに開いたままで、それでもサーバのメモリーを使っています。データを待ってブロックしているクライアント(たとえばBLPOP)も、待っているあいだアイドル時間が増え、最後のコマンドにそれが表れます。「メモリー」(tot-mem)は、入力と出力のバッファを含めて、その接続がサーバで使っている量です。

フラグ
「フラグ」(flags)は、サーバが書くとおりに、フラグ1つにつき1文字で表示されます。よく見るもの:Nは特になし(通常の接続)、bはデータを待ってブロック中(BLPOP、XREAD BLOCK…)、PはPub/Subをサブスクライブ中、xはまだ実行していないMULTIの中、Sはこのサーバに接続しているレプリカ、Mはレプリカがプライマリとのあいだに保つ接続でのプライマリ、OはMONITOR中のクライアントです。

Calíopeの接続も一覧に入っています
Calíopeもクライアントなので、その接続はCaliopeという名前とcaliopeというライブラリで一覧に表示されます。最後のコマンドは、たいてい読み込みそのもの(client|list)です。記号と「このセッション」のラベルが付き、ここからは接続を解除できません。閉じるとセッションが閉じてしまうからです。Calíopeは、名前ではなくIDで自分の接続を見分けます。同じサーバに接続している別のCalíopeのインスタンスも同じ名前を持ちますが、それは別のクライアントです。

接続解除
「接続解除…」は、選択したクライアントの接続を閉じます(CLIENT KILL ID)。必ず先に確認し、クライアント、そのアドレス、ID、最後のコマンドを示して、途中まで進めていたもの(トランザクション、サブスクリプション、ブロック中のコマンド)が失われることを警告します。「接続解除」で確定します。Macではツールバーとコンテキストメニューから、Mac以外ではコンテキストメニューと、行を左にスワイプして操作します。スワイプしてもすぐには解除せず、確認します。そのあと、行はその場で取り除かれ、通知でそのことが示されます。クライアントはまた接続することがあり(多くのプールは自動でそうします)、そのときは次の読み込みで別のIDで再び表示されます。コンテキストメニューには「アドレスをコピー」もあります。

サーバが0と応答したとき
読み込みから確認までのあいだにクライアントがすでに去っていた場合、サーバは0個の接続を閉じたと応答します。それは失敗ではありません。Calíopeは、もう接続していなかったと示し、行を取り除きます。

環境タグがある場合
プロファイルのタグが読み出し専用なら、接続解除は表示されません。タグが書き込みの確認を求めるものなら、接続解除の確認の中でタグが示されます。

キーワード: Redis、クライアント、CLIENT LIST、CLIENT KILL、接続、アイドル、接続時間、フラグ、接続解除

コマンドコンソール

Redisのコンソールでコマンドを入力して応答を読む方法、実行しないコマンドとその理由、そして先に名前の入力を求めるコマンドです。

場所: ワークスペース › ツール › コンソール

対象: Redis Valkey 8.0+

コンソールは、入力したコマンドを、ほかのタブと同じセッションでRedisに送ります。「実行」(またはreturnキー)で実行します。Macでは、Optionキーを押しながらreturnキーを押すと、実行せずに改行します(長いコマンドは複数行にわたってもよく、改行はスペースとして扱われます)。Mac以外では、returnキーは常に実行です。行はredis-cliと同じように分割されます。引数はスペースで区切り、シングルクォートかダブルクォートで囲むと、スペースを含むテキストも1つの引数になります。ダブルクォートの中では\n、\t、\xHHが使えます。閉じていない引用符があるときは送信されず、出力にその理由が表示されます。

履歴
カーソルが最初の行にあるときは上矢印キーで前のコマンドを、最後の行にあるときは下矢印キーで次のコマンドを呼び出します。「履歴の前のコマンド」と「履歴の次のコマンド」のボタンは、キーボードなしで同じことをします。コンソールが実行しなかった行も含めて最後の200行を保持し、同じ行を続けて2回は保存しません。「消去」は出力を空にし、履歴は空にしません。タブを切り替えて戻ってきても、出力、履歴、入力途中のものはそのまま残っています。

応答の読み方
- OKやPONGのようなステータスは、そのまま表示されます。
- 整数の前には(整数)が付きます。
- テキストは常に引用符で囲まれ、制御文字はredis-cliと同じようにエスケープされます("a\r\nb")。UTF-8でないテキストは、バイト単位の長さとともに16進数で表示されます。
- (値なし)は値がないことを意味し、空文字列とは違います。空文字列は""と表示されます。
- リストには番号が付き、空のリストは(空の配列)と表示されます。マップ(HGETALLやCONFIG GETが返すもの)は、番号付きのfield => valueの組で表示されます。セットには、メンバーの数と順序がないことを示すヘッダが付き、メンバーは番号ではなく箇条書きで並びます。
- エラーは赤で、記号と(エラー)を前に付け、サーバが付けるプレフィックス(WRONGTYPE、ERR…)とともに表示されます。
- 2000行を超える応答は切り詰められ、通知で、キーをページごとに走査する「キー」が案内されます。

クラスタでは、各応答に誰が答えたかが示されます。最初のキーのスロットを持つプライマリか、コマンドにキーがなければプロファイルのノードです。キーのないコマンド(DBSIZE、INFO)は、そのノードだけを数えます。

コンソールが実行しないものと、その理由
拒否はそれぞれ理由とともに出力に表示され、コマンドがサーバに届くことはありません。その下の「やってはいけないこと」で、理由を説明するDBAハンドブックのトピックが開きます:
- KEYSはすべてのキーを一度に走査し、実行中はサーバをブロックします。キーを探すには、SCANでページごとに走査する「キー」を使います。
- MONITORは実行中サーバの性能を落とし、外から止めることができません。
- SUBSCRIBE、PSUBSCRIBE、SSUBSCRIBEは、チャネルのメッセージをほかのコマンドの応答に混ぜて届けてしまいます。アクティブなチャネルとそのサブスクライバは「サーバ」にあります。
- SHUTDOWNはサーバを停止します。
- DEBUGには、サーバを止めたりクラッシュさせたりするサブコマンドがあります(DEBUG SLEEP、DEBUG SEGFAULT)。
- RESETとHELLOは、Calíopeが使っている接続の下でプロトコルを変えてしまい、CLIENT REPLY OFFやSKIPは応答を止めてしまいます。次のコマンドは応答を永遠に待つことになります。SYNCとPSYNCは、接続を、サーバに書き込まれるすべてを受け取るレプリカのリンクに変えてしまいます。
- SELECTは、インターフェイスがあるデータベースを表示したまま別のデータベースを読む状態にしてしまいます。データベースはツールのセレクタで選びます。
- MULTI、EXEC、DISCARD、WATCH、UNWATCH:トランザクションは1つの接続の上にあり、コンソールは各行を空いている接続で送るので、続くコマンドが別の接続に行き、トランザクションが開いたまま残るおそれがあります。複数のコマンドを、あいだに何も挟まずにまとめて実行するには、スクリプト付きのEVALがあります。
- データを待つコマンド(BLPOP、BRPOP、BLMOVE、BZPOPMIN、XREAD … BLOCK、WAIT…)で、タイムアウトが0(永遠に待つという意味)のもの、または10秒より長いもの(XREAD BLOCK、WAIT、WAITAOFでは10000ミリ秒を超えるもの):待っているあいだ、セッションのすべてのツールが使う接続の1つを占有してしまいます。タイムアウトがそれより短ければ実行されます。

名前の入力を求めるコマンド
FLUSHDBとFLUSHALLは、そのデータベースの、またはすべてのデータベースのキーをすべて削除し、取り消せません。REPLICAOF、SLAVEOF、CLUSTER RESET、CLUSTER FAILOVERはトポロジを変え、ほかのクライアントが自分のデータにアクセスできなくなるおそれがあります。これらのコマンドでは、フィールドの上に帯が表示され、何がどのサーバで削除または変更されるかを示します。そこにはコマンドの名前を入力するフィールド(大文字と小文字は区別しません)と、入力するまでオフのままのボタンがあります。「キャンセル」で送信せずに残し、出力にそのことが表示されます。

それ以外はすべて実行されます。EVAL、CONFIG SET、CLIENT KILLも含みます。実行したものはコマンドログに記録され、AUTHのパスワードは伏せ字になります。

この一覧はCalíopeのコードの1か所にあり、入力したコマンドを実行するすべての経路がそれを確認します。一覧が変われば、このトピックも一緒に変わります。

環境タグがある場合
プロファイルのタグがセッションを保護している場合、Calíopeは各コマンドが何を書き込むかをサーバに問い合わせます(COMMAND INFO、セッション内で名前ごとに1回)。サーバが書き込みとして示すものは書き込みとして扱います。キーを読み書き両用と宣言するEVALも含みます。サーバが知らないものも書き込みとして扱います。タグが読み出し専用なら、それは送信されず、出力にタグが示されます。タグが書き込みの確認を求めるものなら、FLUSHDBと同じく、コマンドの名前を入力してはじめて実行され、確認の中でタグが示されます。キーに触れずにサーバを変える管理用のコマンドで、サーバが書き込みとして示さないもの(CONFIG SET、CLIENT KILL、REPLICAOF、SLOWLOG RESET、SCRIPT FLUSH、ACL SETUSER、SAVE…)も、Calíopeは書き込みとして扱います。読み取りをするCONFIG GETとCLIENT LISTは、ふだんどおり実行されます。

キーワード: Redis、コンソール、コマンド、REDIS-CLI、キー、MONITOR、SUBSCRIBE、FLUSHDB、FLUSHALL、禁止、履歴、RESP

サーバのトポロジ

Redisセッションのトポロジに表示されるもの:プライマリ、レプリカ、シャード、遅延がバイトで測られる理由、スロットとは何か、クラスタが失敗したときの意味、そしてSentinelがない理由です。

場所: ワークスペース › ツール › トポロジ

対象: Redis Valkey 8.0+

トポロジは、セッションのサーバがどう配置されているかを示します。クラスタは「クラスタ」として、レプリカのあるスタンドアロンのノードは「単独ノードとそのレプリケーション」として表示されます。上部には概要があります。応答しているノードの数(クラスタではプライマリの数も、スタンドアロンのノードではレプリカの数も)と、応答していないノードがアドレスで示されます。その下の「ダイアグラム」は、ノードごとに1つの箱をシャードごとにまとめて描き、プライマリを上に、そのレプリカを下に置きます。「ノード」は同じ内容を表で示します。画面に表示されているあいだ5秒ごとに自動で読み直し、「更新」ですぐに読み直します。

遅延は秒ではなくバイトです
Redisのレプリカは時刻を確認するのではなく、レプリケーションのストリームの何バイト目まで受け取ったかを確認します。そのため「遅延(バイト)」の列は、プライマリの位置からレプリカの位置を引いたものです。Calíopeはプライマリを2回、誰かに問い合わせる前と最後に読みます。その2回のあいだにプライマリが進んだ量が下限で、それを下回るレプリカは「同期済み」と表示されます。その差は、別のマシンに問い合わせるのにかかる時間と区別できないからです。それを上回るときだけ「遅延あり」と表示されます。RedisがINFO replicationで各レプリカの隣に書くlag=は別のもので、最後の確認応答からの秒数です。

プライマリは再起動すると新しいストリームを始めるので、そのレプリカは再同期するまで測れる遅延がありません。表には0バイトと表示する代わりに「プライマリとは別のレプリケーションストリーム上にあります」と、遅延には「未計測(別のストリーム)」と表示されます。レプリカがプライマリとのリンクを失った場合は「プライマリとのリンクがダウンしています」と表示されます。

スロット
クラスタはキーを16384個のスロットに分散します。各キーは名前のCRC16によって1つのスロットに入り、各プライマリはある範囲を受け持ちます。この数は意図的に固定で小さくしてあります。どのプライマリがどのスロットを受け持つかの対応表は、ハートビートのたびにノード間でやり取りされるので、小さいままでなければならないからです。「スロット」の列は各プライマリの範囲を示し、概要には16384個のうちいくつに持ち主がいるかが表示されます。

クラスタが失敗したとき
「クラスタの状態:fail」は、クラスタがコマンドを受け付けなくなったことを意味します。受け持つプライマリが生きていないスロットがあるのです。引き継ぐレプリカのないプライマリが停止したか、複数が同時に停止したためです。応答しないノードは「応答なし」と表示され、その隣に技術的なエラーが表示されます。それ以外のこと(ロールも遅延も)は、そのノードについて何も主張しません。

Sentinelがない理由
Sentinelに対して開いたセッションにはトポロジは表示されません。Sentinelはプライマリを監視してフェイルオーバーを決めますが、データを持たず、自分のレプリカもありません。プライマリとそのレプリカを見るには、プライマリに対してセッションを開いてください。

VoiceOverでは、表が図の代わりになります。各行は1回読み上げられ、各列の名前が値の前に読まれます。

キーワード: Redis、トポロジ、クラスタ、レプリカ、プライマリ、遅延、バイト、スロット、16384、Sentinel、フェイルオーバー、cluster_state

Redisのレポート

Redisのレポートとは何か、どんなフィールドがあるか、そしてサーバにかかる負荷:実行のたびにキーを走査します。

場所: ワークスペース › ツール › レポート

対象: Redis Valkey 8.0+

Redisのレポートにはクエリーがありません。キーの走査を表にしたもので、キー1つにつき1行です。Redisのセッションで「新規レポート」から作成し、テキストエディタの代わりにそのフィールドが表示されます。

選ぶもの
「パターン」はキーの名前に対するグロブです(app:*、session:??、user:[ab]*)。空ならすべてです。「型」はその型のキーだけを残します。「列」でkey、type、ttl、memory、encoding、lengthをオンにし、オンにした順に表示されます。「ハッシュのフィールド」では、カンマ区切りの各フィールドが1つの列になり、そのハッシュのフィールドの値が入ります。ハッシュでないキーや、そのフィールドを持たないキーでは空になります。「行数の上限」は最大の行数で、空ならエンジンの上限です。

負荷について
「実行」を押すたびに、Calíopeはパターンに一致するすべてのキーをSCANで走査し(クラスタではすべてのプライマリで)、そのあとで残す行の列だけを問い合わせます。上限が削るのは行で、走査ではありません。何百万ものキーがあるデータベースで広いパターンを使うと、10行しか求めなくてもレポートには時間がかかります。「停止」で、走査の次のページの前に止めます。

表
行はキーの順に並べ替えて表示されるので、2回実行しても同じ表になります。上限より多い場合は、その順で最初のものが残り、表に切り詰めたことが示されます。クラスタで、キーを走査しているあいだにスロットの持ち主が変わった場合(移行中)は、走査全体をやり直します。クラスタが3回続けてスロットを移動し続けた場合、レポートは、キーが欠けているかもしれない表を出す代わりに、失敗してそう示します。memoryはMEMORY USAGEの応答で、コレクションではサンプリングによる推定値です。UTF-8でないキーやフィールドは、長さとともに0x…として表示され、その列はバイナリとして示されます。

パラメータ
パラメータはパターンの中に$$nameと書き、「パラメータを宣言」で宣言します。その値は文字どおりに照合されます。値の中の*はアスタリスクで、ワイルドカードではありません。値は宣言した型に従って書かれ、その型でない値は実行の前に拒否されます。

そのほか
「書き出す」で、PDFを含むメニューのどの形式でも保存でき、「履歴」には、行や失敗とともにすべての実行が残ります。RedisのレポートはRedisのセッションでしか実行できません。それ以外のセッションでは、ツールはそのレポートがそのセッションのものではないことを示し、実行させません。「スケジュール」はこのレポートには使えません。スケジュールできるのはリレーショナルデータベースのレポートだけで、スケジュールが回るたびに、Redisのレポートは履歴に「スキップ」として記録されます。

キーワード: Redis、レポート、SCAN、パターン、グロブ、キー、上限、列、ハッシュ、パラメータ、書き出し、履歴

Redisのサーバパネルが読み込めないとき

正常な読み込みのあとで読み込みが失敗すると、パネルは、最新ではないことを示す通知の下に前回の数値を表示し続けます。

場所: ワークスペース › ツール › サーバ

対象: Redis Valkey 8.0+

正常に終わったINFOの読み込みのあとで読み込みが失敗しても、パネルは空白になりません。エラーを示し、最新ではないと伝える通知の下に、前回の数値を表示し続けます。通知は次に正常に読み込めたときに消えます。

最初の読み込みが失敗した場合は、表示できる前回のものがないので、エラーが「再試行」とともに表示されます。失敗が接続の切断によるものなら、Calíopeはほかの切断と同じようにそれも知らせます。

キーワード: Redis、サーバ、INFO、エラー、前回の読み込み、再試行

Redisのメモリー分析が失敗したとき

完了した分析のあとで分析が失敗すると、アナライザは、理由を示す通知の下に前回の結果を表示し続けます。

場所: ワークスペース › ツール › メモリー

対象: Redis Valkey 8.0+

完了した分析のあとで分析が失敗しても、アナライザは空白になりません。理由を示す通知の下に、前回の結果を表示し続けます。

前回の結果がなければ、エラーが「再試行」とともに表示されます。これは同じキーの上限でもう一度分析します。

キーワード: Redis、メモリー、分析、エラー、再試行

Redisのスローコマンドが読み込めないとき

正常な読み込みのあとでログの読み込みが失敗すると、タブは、エラーを示す通知の下に前回のエントリーを表示し続けます。

場所: ワークスペース › ツール › スローログ

対象: Redis Valkey 8.0+

正常に終わったSLOWLOGの読み込みのあとで読み込みが失敗すると、タブは、エラーを示し、最新ではないと伝える通知の下に、前回のエントリーを表示し続けます。通知は、5秒後に自動で行われる次の正常な読み込みで消えます。ログの消去に失敗した場合も、同じ通知に表示されます。

最初の読み込みが失敗した場合は、表示できる前回のものがないので、エラーが「再試行」とともに表示されます。失敗が接続の切断によるものなら、Calíopeはほかの切断と同じようにそれも知らせます。

キーワード: Redis、スローコマンド、SLOWLOG、エラー、前回の読み込み

Redisのクライアントの一覧を読み直せないとき

正常な読み込みのあとで読み直しが失敗すると、タブは、理由を示す通知の下に前回の一覧を表示し続けます。

場所: ワークスペース › ツール › クライアント

対象: Redis Valkey 8.0+

正常に終わったCLIENT LISTの読み込みのあとで読み直しが失敗すると、タブは、理由を示し、最新ではないと伝える通知の下に、前回の一覧を表示し続けます。

最初の読み込みが失敗した場合は、表示できる前回のものがないので、エラーが「再試行」とともに表示されます。失敗が接続の切断によるものなら、Calíopeはほかの切断と同じようにそれも知らせます。

キーワード: Redis、クライアント、CLIENT LIST、エラー、前回の読み込み

Redisのコンソールに応答がないとき

応答の前に接続が切れると、その行は理由とともに出力に残り、保留中の確認は破棄されます。

場所: ワークスペース › ツール › コンソール

対象: Redis Valkey 8.0+

応答が届く前に接続が切れると、その行は切断の理由と稲妻のアイコンとともに出力に残り、Calíopeはほかの切断と同じようにそれを知らせます。保留中だった確認は破棄されます。

-ERRのように、サーバがエラーで応答した場合はこれにあたりません。それは応答で、出力の中にエラーとして表示されます。

キーワード: Redis、コンソール、応答なし、切断、接続

Redisのトポロジを読み直せないとき

読み直しが失敗すると、タブは通知の下に前回のトポロジを表示し続けます。どのノードもクラスタの対応表を返さないときは、セッションを開いたときに読んだものを描きます。

場所: ワークスペース › ツール › トポロジ

対象: Redis Valkey 8.0+

正常に終わった読み込みのあとで読み直しが失敗すると、タブは、理由を示し、最新ではないと伝える通知の下に、前回のトポロジを表示し続けます。

どのノードもクラスタの対応表を返さないときは、タブはセッションを開いたときに読んだものを、最新ではないかもしれないと伝える通知の下に描きます。

最初の読み込みが失敗した場合は、表示できる前回のものがないので、エラーが「再試行」とともに表示されます。失敗が接続の切断によるものなら、Calíopeはほかの切断と同じようにそれも知らせます。セッションを閉じたあとは、何も知らせません。

キーワード: Redis、トポロジ、クラスタ、対応表、エラー、前回の読み込み