14
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-05-16

概要

  • 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 などが存在する。

参考


コマンド編に続く

14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?