概要
-
Redis = NoSQLデータベースの一種
- 実装はC
- BSDライセンス
-
REmote DIctionary Server
の略で、ネットワーク越しにKVSとして使うことを前提とする -
オンメモリで動作するが、HDDに保持して永続化することも可能
- 高頻度のKVのみ、あるいはキーのみをオンメモリに配置できる
バージョン比較
バージョン | リリース時期 | 主な変更点 |
---|---|---|
2.0 | 2010/09 | 仮想メモリ対応 |
2.2 | 2011/02 | 効率向上 |
2.4 | 2012/10 | 仮想メモリ機能を非推奨化 |
2.6 | 2012/10 | 仮想メモリ機能を除去, Lua eval, 接続上限数の撤廃 |
3.0 | 2015/04 | クラスタリング対応 |
3.2 | 2016/05 | BITFIELD, GEO API |
導入
OSXの場合はbrewでインストールできる。
$ brew update
$ brew install redis
$ redis-server -v
>Redis server v=3.2.8 sha=00000000:0 malloc=libc bits=64 build=1d731032efdfe68c
RH系(CentOS 6.x)の場合はyumに存在しなかったのでビルドした。
$ sudo yum update
$ sudo yum upgrade
$ sudo yum install gcc* tcl
$ wget http://download.redis.io/redis-stable.tar.gz
$ tar xzf redis-stable.tar.gz
$ cd redis-stable
$ sudo make
$ sudo make install
$ redis-server -v
>Redis server v=3.2.8 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=26e8ec75e44c781d
さらに、Redisをサービスとして常駐させたい場合はinstall_server.sh
を実行する。
対話形式によってそれ用のファイル/ディレクトリが作成される。
$ ./utils/install_server.sh
>Welcome to the redis service installer
>This script will help you easily set up a running redis server
>
>Please select the redis port for this instance: [6379]
>Selecting default: 6379
>Please select the redis config file name [/etc/redis/6379.conf]
>Selected default - /etc/redis/6379.conf
>Please select the redis log file name [/var/log/redis_6379.log]
>Selected default - /var/log/redis_6379.log
>Please select the data directory for this instance [/var/lib/redis/6379]
>Selected default - /var/lib/redis/6379
>Please select the redis executable path [/usr/local/bin/redis-server]
>Selected config:
>Port : 6379
>Config file : /etc/redis/6379.conf
>Log file : /var/log/redis_6379.log
>Data dir : /var/lib/redis/6379
>Executable : /usr/local/bin/redis-server
>Cli Executable : /usr/local/bin/redis-cli
>Is this ok? Then press ENTER to go on or Ctrl-C to abort.
>Copied /tmp/6379.conf => /etc/init.d/redis_6379
>Installing service...
>Successfully added to chkconfig!
>Successfully added to runlevels 345!
>Starting Redis server...
>Installation successful!
コマンドの構成
Redisは機能によって復数のコマンドを使いわける。
-
redis-server
= Redis自身(サーバ)の操作 -
redis-sentinel
= 監視とフェールオーバ機能 -
redis-cli
= CLIクライアント -
redis-benchmark
= パフォーマンス計測 -
redis-check-aof
,redis-check-dump
= データファイルの破損時に利用
起動
サーバを起動する
redis-server
コマンドでサーバを操作する。
redisがフォアグラウンドで起動し、バージョン情報やポート番号などが表示された後、ログが流れる。
$ redis-server
また起動時には設定ファイルを指定できる。
$ redis-server /path/to/config.conf
デーモンとして起動する
デフォルトではフォアグラウンドで動作するので、デーモンとして起動したい場合は--daemonize
オプションを指定する。
$ redis-server --daemonize yes
$ ps aux | grep redis
>root 23618 3.1 0.7 133544 7520 ? Ssl 23:26 0:00 redis-server *:6379
導入時にinstall_server.sh
を実行するなどしてサービス登録が済んでいる場合は、service
等で制御できる。
$ service redis_6379 start
$ service redis_6379 stop
接続
クライアントから接続する
redis-cli
コマンドで、クライアントを起動する。
単にredis-cli
を実行すると、ローカルのRedisサーバに接続する。
$ redis-cli
またping
オプションで、接続の可否を確認できる。
$ redis-cli ping
> PONG
接続時のオプション
redis-cli -h
でオプションを一覧できる。
以下、利用頻度の高そうなものを抜粋。
オプション | 内容 | デフォルト |
---|---|---|
-h | オプション一覧 | - |
-v | バージョン表示 | - |
-h | ホスト名指定 | localhost |
-p | ポート番号指定 | 6379 |
-a | パスワード指定 | - |
--raw | マルチバイト許可 | - |
--rdb | .rdb取得 | - |
デバッグ用オプション
オプション | 内容 |
---|---|
--latency | レイテンシを表示 |
--latency-history | レイテンシを堆積表示 |
--slave | マスタサーバからのコマンドを表示 |
データ構造等
キーについて
キーは文字列としてRedisに登録される。
命名に関しての制約は非常にゆるい様子で、具体的な制限を示した資料は見つからなかった。
たとえば試した限りでは以下のような文字が使えた:
- 空白(
SET 'a b c' 'foo'
) - 予約語(
SET 'SET' 'foo'
) - 特殊文字(
SET '!@#$%^&*()-+|~{}[];:\'",.<>/?' 'foo'
) - マルチバイト文字(
SET あああ 'foo'
)
文化的には、キー名をドメインごとにコロン :
で区切って表現するルールを採用している例が多いようだった。
SET some:service:some:user:id:123 '999'
なおキーについて大文字小文字は区別__される__。
値について
値として以下の型が使える:
- 文字列
- リスト = 配列
- セット = リストと異なり順序を保持せず、要素の重複を許容しない
- ソート済みセット = セットとしての特性に加え、インデックスを設定できる
- ハッシュ = 連想配列
Redisはドキュメント指向DBでは__ない__ため、データ構造を入れ子にすることは__できない__。
複雑なデータを格納したい場合はJSONなどをシリアライズして格納することになる(アンチパターン?)。
また値ではなくコマンドの戻り値として、integer, error, nil などが存在する。
参考
コマンド編に続く