巨人の肩の上に登る

先人の積み重ねた発見に基づいて、なにかを発見しようとすることを指す。

Redis 入門

f:id:mayo_yamasaki:20131015074224p:plain

Redis 使うことになったので,基礎的事項を最速でマスターできるようにまとめてみる.

Redis とは

Redisは,Key-Value型のNoSQLです.
また,In Memory であるため,データ容量に対する制限はあるものの非常に高速に動作します.

どのくらい早いのかという benchmark は,ググると結構でてくると思いますので,参考を一つ.
redis、それは危険なほどのスピード

MongoDB, HBaseなどのNoSQLとの,比較記事があるので参考に.
Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Couchbase vs Neo4j vs Hypertable vs ElasticSearch vs Accumulo vs VoltDB vs Scalaris comparison

細かい話などは,redisドキュメント日本語訳などを参考に.


Redis Install

環境は Mac OS X を想定しています.今回は,Homebrewを使ってInstallします.

brew install redis

Install が終わると,下記のようなコマンドが使えると思います.

/usr/local/bin/redis-server
/usr/localbin/redis-cli


Redis 入門

まず,Redis の特徴として,データ構造が多彩なことが上げられます.

  • String
  • List
  • Set
  • Sorted Set
  • Hash

Sorted Set は,UniqなListのようなモノです.

起動と終了

Redis Server と,CUIのClientの起動と終了.

# redis server の起動
# 終了には C-c を使います.
$ redis-server


# redis client の起動
$ redis-cli

# redis client の終了
> exit
# 内容をdumpして終了
> shutdown

defaultでは,カレントディレクトリの ./dump.rdb に保存されます.

基本的操作

データベースの選択

Redisのデータベースは 0, 1, 2...の様な整数値のindexを持っていて,これを用いてデータベースの切り替えを行います.

> select INDEX

# default では 0 になっていて,1を選択するのであれば,下記のようになります.
> select 1
ok
[1]>
データの保存
> bgsave
データのSetとGet
# データのSet
> set KEY VALUE

# データのGet
> get KEY

# Example
> set hoge hello
ok
> get hoge
"hello"

また,複数個のデータの束縛や取得は,次のようにできる.

> mset KEY VALUE KEY VALUE
> mget KEY VALUE KEY VALUE

# Example
> mset a 1 b 2 c 3
OK
> mget a b c
1) "1"
2) "2"
3) "3"
key の表示
# 全ての key を表示
> keys *

keyが存在するかを調べる

> exists KEY

# Example
> set X 10
ok
> exists X
(integer) 1
> exists Y
(integer) 0
keyの削除
del KEY
データ型を調べる
> type KEY

# Example
> set hoge hello
ok
> type hoge
string


データ構造

String

Set, Get で束縛,取得することができる基本的な型.
数値文字の操作も可能.

# Increment
> incr KEY
> incrby KEY NUMBER

# Decrement
> dicr KEY
> dicrby KEY NUMBER

# Example
> set x 10
ok
> incr x
(integer) 11
> dicrby x 10
(integer) 1
List
# 要素の追加
> lpush KEY VALUE # 左から
> rpush KEY VALUE # 右から

# 要素の取り出し
> lpop KEY VALUE
> rpop KEY VALUE

# 要素の表示
# 表示したい区間の index (0, 1, 2...) を指定する
> lrange KEY START END

# N番目の要素を表示
> lindex KEY N

# N番目の要素を更新
> lset KEY VALUE

# Listの長さを取得
> llen KEY

# 任意の区間を取得
> ltrim KEY START END


# Example
> rpush list 1
(integer) 1
> rpush list 2
(integer) 2
> lpush list 0
(integer) 3
> lrange list 0 -1
1) "0"
2) "1"
3) "2"
> lset list 1 New
ok
> lrange list 0 -1
1) "0"
2) "New"
3) "2"
Set

要素の集合.

# 要素の追加
> sadd KEY VALUE

# 要素の削除
> srem KEY VALUE

# 要素の表示
> smembers KEY

# 和集合
> sunion KEY KEY

# 積集合
> sinter KEY KEY

# 差集合
> sdiff KEY KEY


# Example
> sadd seta a
> sadd seta b
> sadd setb c
> sunion seta setb
1) "a"
2) "c"
3) "b"
Sorted Set

ソート済みのセット

# 要素の追加
> zadd KEY VALUE

# 要素の削除
> zrem KEY VALUE

# 要素の表示
> zrange KEY START END # 昇順
> zrevrange KEY START END # 降順 
Hash

Key-Value の辞書型.

# 要素の束縛
hset KEY FIELD VALUE

# 要素の取得
hget KEY FIELD

# Example
# hmset, hmgetで一括の束縛と取得が可能
> hmset dic a hoge b fuga
> hget dic a
"hoge"


Python から使う

Python からの使い方の紹介.
redis-py を使う.

redis-py の install

sudo pip install redis

Example (README.md からの引用)

>>> import redis
>>> r = redis.StrictRedis(host='localhost', port=6379, db=0)
>>> r.set('foo', 'bar')
True
>>> r.get('foo')
'bar'

最後に

雑な感じですが,以上です.
さっき始めたところなので,間違いがあるかもしれません.


関連記事