Redis入門 インメモリKVSによる高速データ管理 を読んだ

動機

仕事で Rails アプリケーションにジョブキューを導入したい。

個人的に MySQL が好きなのでジョブキューとして Delayed Job を検討したが、ペンディングジョブが数万単位になるとスケールしないことがわかってやめた。聞いた話だけで判断するのはよくないので Delayed Job がどのような SQL クエリを発行するかコードを読んでみたけど、こりゃ重そうだ、という感じだったのでそこで諦めた。

そういう経緯で redis をバックエンドに使う Sidekiq を導入しようとして、redis のことを知る必要が出てきた、という経緯。

学んだこと

  • redis には4種類のデータ構造を格納できる。文字列、リスト、集合、ソート済み集合
  • それぞれのデータ型で使えるコマンド、実行例
  • インメモリで動作
  • ディスクに永続化する方法が2つ。1.スナップショットを保存する、2.一定時間ごとに追加書き込みする
    • これはスナップショット + 差分バックアップ(バイナリログ)という MySQL のバックアップ戦略に似ていると感じた
  • スナップショットを取るときに倍のメモリが必要なので、データは全体メモリ量の40%〜50%に抑えること
  • 文字列型にビットを読み書きできるのおもしろい
  • トランザクションのようなことができる。あるクライアントが他のクライアントから割り込まれずに複数のコマンドを実行できる。MULTI と EXEC というコマンドを使う
  • info コマンドでいろんな情報を表示できる
  • レプリケーション、シャーディング、スケールさせるためのいろんな手法とかいろいろ書いてあって盛りだくさん(真面目に読んでない)
  • 全体的に利用例が具体的でよかった。ただ難しいことをさらっと書いてあるのでちゃんと自分の中で消化しながら読むと時間かかりそうな印象

まとめ

ざっくり redis のことを知れればいいや、という目的があったので飛ばしながら読んだ。第1章〜4章まではコード(pythonで書かれてる)含めて全部読んだ。それ以降はコード読んでない。日本語も読み飛ばして雰囲気をつかむことに努めた。

第1章 Redisとは何か
第2章 Redisウェブアプリケーションの解剖学
第3章 Redisのコマンド
第4章 データの安全を保証し、パフォーマンスを確保する

この知識を仕入れてから仕事したら、リストの要素全部取得するのどうやるんだっけ….ああ、lrangeか…という感じで記憶はしてなかったけど、見たことあるぞという感じになってよかったという気がする。

Redis入門 インメモリKVSによる高速データ管理 (アスキー書籍)

Redis入門 インメモリKVSによる高速データ管理 (アスキー書籍)