2013年6月15日土曜日

redisのインストールと基本

redisは永続化可能なインメモリKVSの一種。
インストールしてみましょう。

# redis用のユーザーとディレクトリを追加
groupadd redis
useradd redis -g redis -M -s /sbin/nologin

mkdir -p /var/redis/{data,tmp}
mkdir -p /var/run/redis
mkdir -p /var/log/redis

chown -R redis:redis /var/redis/ /var/run/redis /var/log/redis

# Redisをダウンロードしてインストール
wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz

tar zxvf redis-2.6.12.tar.gz
cd redis-2.6.12
make && make install

完了すると以下のコマンドが使えるようになります。

redis-check-aof   redis-cli
redis-benchmark   redis-check-dump  redis-server

redis-server
redisサーバ起動

サーバを起動するコマンドです。実行するとコンソールを呼び出せるようになります。

                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 2.6.12 (c6d4084b/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in stand alone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 3166
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'
強制終了は Ctrl + C :データ保存されないこ多いので、redis-cliから終了しましょう。

redis-cli
コンソール呼び出し

サーバのシャットダウンはコンソールから shutdown するとデータ永続化されるので、こちらを
使いましょう。


扱えるデータ型は主に以下。


  • string
  • list
  • set
  • sorted-set
  • hash
いくつか見ていきましょう。

単純な文字列型を挿入、取得。

redis 127.0.0.1:6379> set test value
OK
redis 127.0.0.1:6379> get test
"value"
複数登録するときは、
redis 127.0.0.1:6379> mset test value name masazblog
OK
redis 127.0.0.1:6379> mget test name
1) "value"
2) "masazblog"

型を取得。

redis 127.0.0.1:6379> type test
string

カウンターを使う。

redis 127.0.0.1:6379> incr counter
(integer) 1
redis 127.0.0.1:6379> incr counter
(integer) 2
redis 127.0.0.1:6379> get counter
"2"
この数値計算は、DBデータにもそのまま使えます。
redis 127.0.0.1:6379> set score 111
OK
redis 127.0.0.1:6379> get score
"111"
redis 127.0.0.1:6379> incr score
(integer) 112
redis 127.0.0.1:6379> incrby score 10
(integer) 122
redis 127.0.0.1:6379> decr score
(integer) 121
redis 127.0.0.1:6379> decrby score 20
(integer) 101

key一覧の表示(正規表現が使えます)

redis 127.0.0.1:6379> keys *
1) "test"
2) "name"
3) "score"
4) "sroce"
redis 127.0.0.1:6379> keys s*
1) "score"
2) "sroce"


存在確認

redis 127.0.0.1:6379> exists score
(integer) 1 ←ある
redis 127.0.0.1:6379> exists tttt
(integer) 0 ←ない

期限付きkey
redis 127.0.0.1:6379> set age 24
OK
redis 127.0.0.1:6379> expire age 8 ←keyの有効期間8秒
(integer) 1
redis 127.0.0.1:6379> exists age
(integer) 1
redis 127.0.0.1:6379> exists age ←8秒すぎると無効
(integer) 0

List型 [key] [value]


追加:(l/r)push ←lは左から、rは右から
削除:(l/r)pop ←lは左から、rは右から

redis 127.0.0.1:6379> rpush mycolor pink ←末尾に追加していく
(integer) 1
redis 127.0.0.1:6379> rpush mycolor green
(integer) 2
redis 127.0.0.1:6379> rpush mycolor red
(integer) 3
redis 127.0.0.1:6379> rpush mycolor yellow
(integer) 4
redis 127.0.0.1:6379> rpush mycolor blue
(integer) 5
redis 127.0.0.1:6379> rpush mycolor purple
(integer) 6
redis 127.0.0.1:6379> lrange mycolor 0 5 ←要素の添字は0から。添字を指定して取得。
1) "pink"
2) "green"
3) "red"
4) "yellow"
5) "blue"
6) "purple"
redis 127.0.0.1:6379> lrange mycolor 0 -1 ←modの-1で指定することも可能。
1) "pink"
2) "green"
3) "red"
4) "yellow"
5) "blue"
6) "purple"
要素の削除
redis 127.0.0.1:6379> lrange mycolor 0 -1
1) "pink"
2) "green"
3) "red"
4) "yellow"
5) "blue"
redis 127.0.0.1:6379> lpop mycolor ←左端の要素削除
"pink"
redis 127.0.0.1:6379> lrange mycolor 0 -1
1) "green"
2) "red"
3) "yellow"
4) "blue"
redis 127.0.0.1:6379> lindex mycolor 2
"yellow"
redis 127.0.0.1:6379> ltrim mycolor 0 2
OK
redis 127.0.0.1:6379> lrange mycolor 0 -1
1) "green"
2) "red"
3) "yellow"


Set型

sadd:追加
srem:削除

一覧:smembers

和集合:sunion
積集合sinter
差集合:sdiff

redis 127.0.0.1:6379> sadd myset1 a
(integer) 1
redis 127.0.0.1:6379> sadd myset1 b
(integer) 1
redis 127.0.0.1:6379> sadd myset1 c
(integer) 1
redis 127.0.0.1:6379> smembers myset1
1) "c"
2) "b"
3) "a"
redis 127.0.0.1:6379> sadd myset1 d
(integer) 1
redis 127.0.0.1:6379> smembers myset1
1) "c"
2) "b"
3) "d"
4) "a"
redis 127.0.0.1:6379> srem myset1 d
(integer) 1
redis 127.0.0.1:6379> smembers myset1
1) "c"
2) "b"
3) "a"
redis 127.0.0.1:6379> sadd myset2 b
(integer) 1
redis 127.0.0.1:6379> sadd myset2 c
(integer) 1
redis 127.0.0.1:6379> sadd myset2 d
(integer) 1
redis 127.0.0.1:6379> sadd myset2 e
(integer) 1
redis 127.0.0.1:6379> smembers myset1
1) "c"
2) "b"
3) "a"
redis 127.0.0.1:6379> smembers myset2
1) "c"
2) "b"
3) "e"
4) "d"
redis 127.0.0.1:6379> sunion myset1 myset2
1) "b"
2) "c"
3) "e"
4) "a"
5) "d"
redis 127.0.0.1:6379> sinter myset1 myset2
1) "c"
2) "b"
redis 127.0.0.1:6379> sdiff myset1 myset2
1) "a"
redis 127.0.0.1:6379> sunionstore myunion myset1 myset2
(integer) 5
redis 127.0.0.1:6379> smembers myunion
1) "b"
2) "c"
3) "e"
4) "a"
5) "d"

すごい簡単で便利。
最後にDB選択と永続化、トランザクション的なものについて見て行きましょう。

データベース選択

0~15が用意されている。
redis 127.0.0.1:6379> select 0
redis 127.0.0.1:6379> select 1


データの保存

redis 127.0.0.1:6379> bgsave

データの保存先

redis起動ディレクトリの dump.rdb

データの保存を随時行いたい

AOF(同期書き込みサポート)を保存することになります。redis.confに以下の設定を行います。
appendonly yes
100倍くらい遅くなるので、安全を優先したい場合のみ使用しましょう。


トランザクション的なもの
複数の処理をまとめて行う。途中の終了した時のロールバックは無し。

multi
処理
処理

exec / discard

redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> incr counter
QUEUED
redis 127.0.0.1:6379> incr visitor
QUEUED
redis 127.0.0.1:6379> exec
1) (integer) 1
2) (integer) 1
redis 127.0.0.1:6379> multi
OK
redis 127.0.0.1:6379> incr counter
QUEUED
redis 127.0.0.1:6379> incr visitor
QUEUED
redis 127.0.0.1:6379> discard
OK
redis 127.0.0.1:6379> mget counter visitor
1) "1"
2) "1"




0 件のコメント:

コメントを投稿