Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

Redis RDBファイルを解析する包括的ツール「rdb-tools」の使い方とカスタマイズ方法

背景

Redisを運用していると、メモリ使用量の増大や帯域幅の逼迫といった問題に遭遇することがあります。こうした問題に対処するには、Redisのメモリ状況を詳細に分析する必要があります。

Redisのメモリ分析には、「オンライン分析」と「オフライン分析」の2つのアプローチがあります。オンライン分析は稼働中のRedisサーバーに直接接続してメモリを解析するため、サーバーへの負荷が増加し、安定性に影響を及ぼす可能性があります。一方、オフライン分析はRDBバックアップファイルをもとに解析を行うため、Redisサーバーの安定性に影響を与えません。使用メモリが2GBを超えるようなケースでは、オフライン分析が推奨されます。

では、Redisのメモリをオフラインで分析するにはどうすればよいのでしょうか。オープンソースの世界には、redis-rdb-toolsrdrという2つの有名なツールがあります。

redis-rdb-toolsはPythonで、rdrはGolangで実装されています。これらの言語に不慣れな開発者にとって、既存の機能をベースに独自の機能を追加するのは決して簡単ではありません。そこで本記事では、C#で実装されたもう一つのオフライン分析ツールを紹介します。C#開発者にとっては、こちらの方がはるかに拡張しやすいでしょう。

rdb-toolsとは

rdb-toolsは、RedisのRDBファイルを解析・分析するためにC#で実装されたツールです。

このツールは、以下の2つの部分で構成されています。

  • パーサーライブラリ:自由にカスタマイズできます
  • CLI分析ツール:コマンドラインから基本的な利用状況を分析できます

パーサーライブラリは net6.0 をベースとしているため、簡単に拡張できます。

CLIツールも同様に net6.0 をベースとしており、command-line-apiを使って構築されています。ランタイムへの依存なしに単一のバイナリファイルとしてパッケージ化できる点も特徴です。

CLIツールの使い方

rdb-cliのインストール方法は2通りあります。

  1. .NET 6.0 SDKがインストールされていない場合:最新の安定版リリースページから、ご自身のOSに対応したバージョンをダウンロードしてください。
  2. .NET 6.0 SDKがインストール済みの場合:dotnet tool install --global rdb-cli コマンドでインストールできます。

ここでは、1つ目の方法を見ていきましょう。

ダウンロードして解凍すると、rdb-cli という名前の実行ファイルが取得できます。

./rdb-cli -h を実行すると、ヘルプ情報が表示されます。

Redis RDBファイルを解析する包括的ツール「rdb-tools」の使い方とカスタマイズ方法

ご覧のとおり、利用できるコマンドは2つあります。その中で最も重要なのが memory コマンドです。

Redis RDBファイルを解析する包括的ツール「rdb-tools」の使い方とカスタマイズ方法

ヘルプ情報から、RDBファイルのパスといくつかのオプションを指定する必要があることがわかります。

シンプルでよく使われる例は以下のとおりです。

./rdb-cli memory /tmp/test/demo.rdb -ot html

このコマンドを実行すると、RDBファイルが解析され、その結果がHTML形式で出力されます。

下のスクリーンショットは実際のコマンド実行結果です。2.1GBのRDBファイルの解析にかかった時間はわずか32秒。かなり高速な処理速度だと言えるでしょう。

Redis RDBファイルを解析する包括的ツール「rdb-tools」の使い方とカスタマイズ方法

詳細なHTMLレポートは /tmp/test/res.html に出力されます。早速中身を見てみましょう。

Redis RDBファイルを解析する包括的ツール「rdb-tools」の使い方とカスタマイズ方法

Redis RDBファイルを解析する包括的ツール「rdb-tools」の使い方とカスタマイズ方法

Redis RDBファイルを解析する包括的ツール「rdb-tools」の使い方とカスタマイズ方法

Redis RDBファイルを解析する包括的ツール「rdb-tools」の使い方とカスタマイズ方法

HTMLレポートは大きく3つのセクションで構成されています。

第1セクション:基本情報
RDBのバージョン情報、Redisのバージョン情報、総メモリ使用量、キーの総数などが含まれます。

第2セクション:ヒストグラム
データ型ごとのメモリおよびキー数の分布、有効期限(TTL)ごとのメモリおよびキー数の分布などが可視化されます。

第3セクション:各種テーブル
上位キープレフィックス一覧、大きなキー(Big Key)の一覧、Stream型キーの一覧、Functions一覧(Redis 7.0以降)などが含まれます。

また、すべての情報を分析するのではなく、特定の条件で絞り込みたい場合には、さまざまなパラメータオプションを指定できます。

具体例を2つ紹介します。

1. DB 9とDB 10だけを分析したい場合:

./rdb-cli memory /tmp/test/demo.rdb -ot html --db 9 --db 10

2. string型とhash型だけを分析したい場合:

./rdb-cli memory /tmp/test/demo.rdb -ot html --type string --type hash

参考までに、2〜8GBのRDBファイルに対する解析時間の測定結果も補足しておきます。

Redis RDBファイルを解析する包括的ツール「rdb-tools」の使い方とカスタマイズ方法

ここまで紹介したCLIツールだけでは、要件を満たせないケースもあるかもしれません。そんなときは、パーサーライブラリをベースに独自の処理をカスタマイズできます。

パーサーライブラリの使い方

まず、NuGetから RDBParse パッケージをインストールします。

dotnet add package RDBParse

次に、IReaderCallback インターフェースを実装したクラスを作成します。

続いて、BinaryReaderRDBParser クラスの新しいインスタンスを生成します。

最後に、BinaryReaderRDBParser インスタンスの Parse メソッドを呼び出します。

以下のコード例をご覧ください。

public class MyReaderCallBack : IReaderCallback
{
}
var path = "/yourpath/your.rdb"
var cb = new MyReaderCallBack();
var parser = new RDBParser.BinaryReaderRDBParser(cb);
parser.Parse(path);

まとめ

本記事では、C#で実装されたRDB分析ツール「rdb-tools」を紹介し、その基本的な使い方とカスタマイズ方法について解説しました。

皆さんのRedis運用のお役に立てば幸いです!

参考資料

  • rdb-tools GitHubページ
  • Redisのrdb.c
  • rdr GitHubページ
  • redis-rdb-tools GitHubページ
  1. Redis開発者必見!RedisInsightが完璧なツールである5つの理由

    Redisを活用したアプリケーションを構築する開発者にとって、RedisInsightは軽量かつマルチプラットフォーム対応の管理・可視化ツールです。直感的で使いやすいひとつの環境の中で、アプリケーションの設計、開発、最適化を支援します。RedisInsightはRedisデータベース向けに直感的かつ効率的なGUIを提供し、データベースとのやり取りやデータ管理をより簡単にします。主要なRedisモジュールの多くを標準でサポートしており、メモリの分析やデータベース利用状況のパフォーマンスプロファイリングを行うツールも備え、より良いRedisの使い方へと導いてくれます。既存キーのスキャン、新規キーの

  2. Redis(REmote DIctionary Server)とは?基本概念と主な特徴を徹底解説【初心者向けチュートリアル】

    Redisは、BSDライセンスのオープンソースNoSQLデータベースです。データをメインメモリ(RAM)上に格納するインメモリデータベースであり、キーバリューストアという仕組みに基づいて設計されています。また、データ構造ストア(Data Structure Store)とも呼ばれています。 それでは、それぞれの用語をひとつずつ詳しく見ていきましょう。 1. キーバリューストア(Key-Value Store) キーバリューストアとは、データを「キー」と「値」のペアとして保存・取得するデータストレージの方式です。各キーは、データベース内に保存された値を一意に識別する役割を持ちます。Redisは、