Redisについて
Redisについてお話ししたいと思います。
Redisとは
メモリ上にKVS(Key Value Store)を保存できるようにするソフトウェアです。
- インメモリ型データベース
- メモリ上にデータをすべて持ち、ディスクから取り出すよりも高速処理が可能になる
- データを永続化する
- データ構造サーバー
- String型, List型, Set型, SortedSet型, Hash型のデータ構造を持つことができる
公式サイト
データ型について
- String型
- 個々の要素を保存
- List型
- 順番に並べた複数の要素 ex: 時系列用のデータ
- Set型
- 順不同の複数の要素。重複を許さない ex: タグ
- SortSet型
- Setの特徴を持ちつつ、個々の要素にScore付けをする ex: ランキング機能
- Hash型
起動方法
redis-server # 別のconsole画面を開く redis-cli
これでコマンドライン上から操作できるようになります。
String型の操作
String型は単純なkey, value
を保存するものになります。
set
key, valueの値を設定する
127.0.0.1:6379> set foo bar 127.0.0.1:6379> keys * 1) "foo"
get
keyを指定して、valueの値を取得します。
127.0.0.1:6379> get foo =>bar
del
keyを指定して、 key, valueを削除します。
127.0.0.1:6379> del foo =>1 127.0.0.1:6379> keys *
List型
(l/r)push
lは先頭に追加で、rは末尾に追加されます。
127.0.0.1:6379> rpush number 1 (integer) 1 127.0.0.1:6379> rpush number 2 (integer) 2 127.0.0.1:6379> rpush number 3 (integer) 3 127.0.0.1:6379> rpush number 4 (integer) 4 127.0.0.1:6379> rpush number 5 (integer) 5
(l/r)pop
lは先頭を削除で、rは末尾を削除します。
127.0.0.1:6379> rpop number "5" 127.0.0.1:6379> lpop number "1"
lrange
lrangeでList型の値を取得します。 lはList型のlを表しています。
127.0.0.1:6379> lrange number 0(start) -1(end) 1) "2" 2) "3" 3) "4"
lindex
特定の位置の値を取得
127.0.0.1:6379> lindex number 2 "4" 127.0.0.1:6379> lindex number 0 "2"
llen
要素の数を取得
127.0.0.1:6379> llen number (integer) 3
ltrim
指定した位置以外の値を削除する
127.0.0.1:6379> ltrim number 0 1 OK 127.0.0.1:6379> lrange number 0 -1 1) "2" 2) "3"
Set型
sadd
Set型の値を設定していく
127.0.0.1:6379> sadd member foo bar baz (integer) 3 127.0.0.1:6379> sadd member bob (integer) 1 127.0.0.1:6379> sadd member2 abc def ghi (integer) 3 127.0.0.1:6379> sadd member2 foo bar (integer) 2
srem
Set型の値を削除する
127.0.0.1:6379> srem member bob (integer) 1
smembers
Set型の値を取得する
127.0.0.1:6379> smembers member 1) "foo" 2) "bar" 3) "baz"
sunion
和集合
127.0.0.1:6379> sunion member member2 1) "baz" 2) "foo" 3) "bar" 4) "def" 5) "abc" 6) "ghi"
sinter
積集合
127.0.0.1:6379> sinter member member2 1) "foo" 2) "bar"
sdiff
差集合
127.0.0.1:6379> sdiff member member2 1) "baz"
SortSet
zadd
SortSet型の値を設定する
127.0.0.1:6379> zadd score 22 mikami 50 yagami 80 yasuda 21 akashi (integer) 4 127.0.0.1:6379> zadd score 99 hoge (integer) 1
zrem
SortSet型の値を削除する
127.0.0.1:6379> zrem score hoge (integer) 1
zrange
SortSet型の値を取得する(取得方法はList型と同じ)
127.0.0.1:6379> zrange score 0 -1 1) "akashi" 2) "mikami" 3) "yagami" 4) "yasuda" ## revで反対の順番にする 127.0.0.1:6379> zrevrange score 0 -1 1) "yasuda" 2) "yagami" 3) "mikami" 4) "akashi"
zrank
順番を知る
127.0.0.1:6379> zrank score yasuda (integer) 3 ## revで反対の順番にする 127.0.0.1:6379> zrevrank score yasuda (integer) 0
Hash型
hset
Hash型の値を設定する
127.0.0.1:6379> hset user name mikami (integer) 1 ## hmsetで複数の値を設定 127.0.0.1:6379> hmset user email foo@foo.com score 100 OK
hget
Hash型の設定を取得する
127.0.0.1:6379> hmget user name email score 1) "mikami" 2) "foo@foo.com" 3) "100"
hlen
Hash型の値の数を取得する
127.0.0.1:6379> hlen user (integer) 3
hkeys
Hash型のkeyを全て取得する
127.0.0.1:6379> hkeys user 1) "name" 2) "email" 3) "score"
hvalues
Hash型のvalueを全て取得する
127.0.0.1:6379> hvals user 1) "mikami" 2) "foo@foo.com" 3) "100"
hgetall
全ての値を取得する
127.0.0.1:6379> hgetall user 1) "name" 2) "mikami" 3) "email" 4) "foo@foo.com" 5) "score" 6) "100"
まとめ
概要と簡単な使い方の説明になりました。
高速に値を取得するので、一部の場所に使用することができます。
基本的にはデータを永続化する仕組みが整っているとはいえ、ストレージとして利用されるのはおかしいと思っています。
expires
で期限を設定できるので、期限を設定して適切な値保持にしましょう。