Redisチートシート(導入編)


概要

  • 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でインストールできる。

OSX
$ 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に存在しなかったのでビルドした。

RH(CentOS6.x)
$ 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を実行する。
対話形式によってそれ用のファイル/ディレクトリが作成される。

RH(CentOS6.x)
$ ./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等で制御できる。

RH(CentOS6.x)
$ 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 などが存在する。

参考


コマンド編に続く