Redis入門

2022-04-19

Redisは永続化可能なインメモリデータベースで、オープンソースのBSDライセンスで公開されています。
この記事ではRedisの概要から基本的な機能までをご紹介します。

概要

Redis は Key-Value 形式でメモリ上にデータを保存する NoSQL データベースです。
データをストレージに永続化する機能もあり、また、マスター・スレーブ型のレプリケーション機能もあります。
また、単純な Key-Value ストアではなく、複雑な型のデータとそれに対するアトミックな操作もサポートしています。

環境設定

Mac でのローカル環境の設定について記載します。

インストール・起動・停止

# インストール
$ brew install redis

# 起動( `Ctrl-C` で停止)
$ redis-server

# brew での起動
$ brew services start redis

# brew でのステータス確認
$ brew services info redis

# brew での停止
$ brew services stop redis

Mac 以外のインストールについては こちら を参照してください。

アクセス方法

ここでは redis-cli を利用したアクセスについて紹介します。

# アクセス ※ローカル環境であればオプション不要
$ redis-cli
127.0.0.1:6379> ping # 入力待ち状態に対して ping Enter
PONG

データ型とコマンド

Redis の Key はバイナリもサポートする文字列を利用できます。
Value は、以下のデータ型をサポートします。

  • 文字列/Strings
    • 最大 512MB のテキストまたはバイナリデータ
  • リスト/Lists
    • 追加された順に並べられた文字列の集合
  • セット/Sets
    • 順序なしの文字列の集合で他のセット型と交差・和集合・差集合演算が可能です
  • ソートされたセット/Sorted Sets
    • 値ごとに並べられたセット
  • ハッシュ/Hashes
    • フィールドと値のリストを保存するデータ構造
  • ビット配列/Bitmaps
    • ビットレベルの演算を実行できるデータタイプ
  • HyperLogLogs
    • データセット内の一意の項目を推定する確率的データ構造
  • ストリーム/Streams
    • ログデータ構造メッセージキュー
  • 地理空間/Geospatial
    • 経度/緯度ベースのマップ

以降、代表的なデータ型に関する redis-cli コマンドを説明します。

文字列/Strings

最も単純な Key-Value ストアとして利用できます。
基本的な操作である set get exists del コマンドは以下の通りです。

# 登録
127.0.0.1:6379> set mykey somevalue
OK

# 参照
127.0.0.1:6379> get mykey
"somevalue"

# 存在確認
127.0.0.1:6379> exists mykey
(integer) 1

# 削除
127.0.0.1:6379> del mykey
(integer) 1

リスト/Lists

rpush (右側から要素を追加)、 lpush (左側から要素を追加)、 lrange (左側から要素を参照)、 rpop (右側から要素を取り出し)などの操作が可能です。
なお、exists del といった基本的なコマンドはリストにおいても利用可能です。

# リスト作成・右側から要素を追加
127.0.0.1:6379> rpush mylist A
(integer) 1
# 右側から要素を追加
127.0.0.1:6379> rpush mylist B
(integer) 2
127.0.0.1:6379> rpush mylist C D E # 複数指定可能
(integer) 5
# 参照
127.0.0.1:6379> lrange mylist 0 -1 # 開始・終了要素番号を指定
1) "A"
2) "B"
3) "C"
4) "D"
5) "E"
# 左側から要素を追加
127.0.0.1:6379> lpush mylist first
(integer) 6
127.0.0.1:6379> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"
4) "C"
5) "D"
6) "E"
# 右側から要素を取り出し
127.0.0.1:6379> rpop mylist # 取り出した要素はリストから消える
"E"
127.0.0.1:6379> lrange mylist 0 -1
1) "first"
2) "A"
3) "B"
4) "C"
5) "D"

セット/Sets

sadd (要素を追加)、 smembers (要素の参照)、 sismember (要素がセットに含まれるか)、 spop (要素をランダムに取り出し)などの操作が可能です。

# セット作成・要素を追加
127.0.0.1:6379> sadd myset 1 2 3 # 複数指定可能
(integer) 3
# 参照
127.0.0.1:6379> smembers myset
1) "1"
2) "2"
3) "3"
# 要素がセットに含まれるか確認
127.0.0.1:6379> sismember myset 2
(integer) 1
127.0.0.1:6379> sismember myset 4
(integer) 0
# 要素をランダムに取り出し
127.0.0.1:6379> spop myset
"3"
127.0.0.1:6379> smembers myset
1) "1"
2) "2"

その他のデータ型とそれに対する操作・コマンドについては こちら を参照してください。

永続化

ここでいう永続化はストレージへのデータ保存を指しています。
Redis には以下のような永続化オプションがあります。

  • RDB(Redisデータベース)
    • 指定された間隔でデータセットのポイントインタイムスナップショットを実行します
    • デフォルトではストレージ上に dump.rdb というバイナリファイルで保存されます
    • 自動設定もしくは手動実行( savebgsave コマンド)が可能です
  • AOF(Append Only File)
    • サーバーが受信したすべての書き込み操作をログに記録します
    • サーバーの起動時に再度再生され、元のデータセットを再構築します
  • 永続性なし
    • ストレージにデータを保存せず、インメモリのみになります
  • RDB + AOF
    • 同じインスタンスで AOF と RDB の両方を組み合わせることができます
    • この場合、Redisを再起動すると、 AOF が優先されることに注意してください

データベース

Redis はストア内にいくつかデータベースを設けることができます。

127.0.0.1:6379> config get databases
1) "databases"
2) "16"

デフォルトでは 0 〜 15 に採番された 16 個のデータベースがあります。( dbid といいます)
redis-cli で接続直後の 127.0.0.1:6379> の状態では 0 番目のデータベースを利用しています。
データベースの選択には select コマンドを利用します。

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> 

127.0.0.1:6379[1]>[1] というふうに何番目のデータベースを利用しているかが分かります。
同一の Key で異なる Value を扱いたい場合などに利用しますが、 Redis Cluster は 0 しかサポートしていないなどの制約がありますので、基本的に 0 のみ利用していればいいと思います。( 参考

おすすめ記事