RedisとDBの中身を見るコマンドについて調べてみた

はじめに

MastodonにはRedisというNoSQLのDBが使われています。
NoSQLについてはjson形式のDBだろう程度の理解でしたので、一からお勉強したメモです。
結論から書くとこの記事でMastodonではどのようなデータが流れていて…みたいな話はしていません。
内容としてはとりあえずRedisを触ってみる内容になります。

そもそもRedisとは

Redisの名称はREmote DIctionary Serverを意味している。元々の開発者はVMware所属(2010年3月当時)のエンジニアSalvatore Sanfilippoである。2013年5月からは、RedisはVMwareをスピンオフしたPivotal Software(英語版)にスポンサーされるようになった。2015年6月からは、Redis Labs(英語版)がスポンサーとなっている。

DB-Engines.comの月間ランキングでは、Redisはしばしば最もポピュラーなキー・バリュー型データベース(英語版)として評されている。また、Redisは2015年のユーザーレビューによる満足度と市場でのプレゼンスの評価でNoSQLデータベースで4位を、Docker等の各種コンテナ上で使われているNoSQLデータベースとして1位を、さらに上位50デベロッパーツール&サービスにおけるNoSQLデータベースとしても1位を獲得している。
https://ja.wikipedia.org/wiki/Redis

wikiから読み取るに3年前にはかなりメジャーになっているNoSQLです。

Redisの特徴

  • インメモリ(メモリ上)で動作するため高速
  • データの永続性はないが、スナップショット・トランザクションログでロールバックできる仕組みはある
  • KVSである(KeyとValueのセットでデータが保存される)

RedisのKVSについて

KVSとはKeyとValueのセットでデータが保存されているので、MySQLなどのRDSと異なりサーバを分散させやすいです。
内部データを複雑に処理をして出力する処理については苦手な分野となります。

キー:値

一つのKeyに対して値を一つ持っています。

キー:セット

一つのKeyに対して複数の値を持っています。(例:果物(Key)→みかん、りんご…)

キー:ソート済みセット

上記のセットにScore値を与えて順番をソートします。

キー:リスト

Keyに対してリストを返します。Keyを指定してリストに値を追加削除できます。

キー:ハッシュ

値に対して名前を持っており、Keyと名前を組み合わせて値を取得できます。

キー:ビットマップ

Keyに対して0,1を返します。フラグ管理などで使えます。

Redisの中身を確認するコマンド

redis-cli

redis-cliコマンドモードになります。redis-cli <コマンド>でも実行可能です。

今回はdocker環境上で動作しているredisを操作したコマンドになります。

redis-cli monitor

monitorはログをtail -fしている時と同じようにRedis内の処理を確認することができるコマンドです。

srem,delがコマンドになります。
コマンドについてはこのサイトが綺麗にまとまっています。

redis-cli keys “検索ワード(正規表現)”

keysは正規表現を使用してRedis内のkeyを検索することができます。

redis-cli type “key”

keyから値のタイプを確認できます。タイプによって値を確認するときのコマンドが変わってきます。

出力されるタイプによってコマンドが変わります。

typeごとの確認コマンド

type 確認コマンド 説明
set smembers [key] typeがsetの時にkeyを指定してvalueを取得します。
zset zrange [key] 0 -1 typeがzsetの時にkeyと取得する範囲を指定してvalueを取得します。0,-1は0番目〜最後(-1)までを指定。
list lrange [key] 0 -1 typeがlistの時にkeyを指定してvalueを取得します。0,-1は0番目〜最後(-1)までを指定。
hash hgetall [key] typeがhashの時にkeyを指定してfield,valueを取得します。
hash hkeys [key] typeがhashの時にkeyを指定してfield一覧を取得します。
hash hvals [key] typeがhashの時にkeyを指定してvalue一覧を取得します。

redis-cli help @<コマンド>

コマンドのヘルプを表示します。

Redisを調べての所感

上記のコマンドを駆使すればRedisの中身の調査はできるようになるかと思います。
実際にRedisへの追加、削除コマンドなどは別の機会に記載したいと思います。

私自身、Redisを触ったことがなく、運用しているMastodonにコマンドを実行しながら中身をみてみました。
MastodonでどのようなデータがRedisに保存されているかなど、なかなか分からないながらも楽しめました。
もしRedisを使っているサーバを運用しているのであれば、中身を見てみてはいかがでしょうか。

個人的にPythonと組み合わせて何か作ってみたいなぁという感じです。
ただ見るだけでなく、実際に使ってみないと理解するのは難しいですね…

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です