2013年4月18日木曜日

redisのまとめ

http://gihyo.jp/dev/feature/01/redis

メモリ内にデータを格納するキーバリューストアでNoSQLの一種。
メモリ内にデータを蓄えるので高速に動く。
memcachedとの違いは、memcachedはGETやSETなどシンプルな操作に特化している
のに対して、redisはいろいろと複雑な操作ができること。
memcachedは古いデータから順に削除するが、redisは明示的に削除をするか、timeoutを
設定しない限り削除されない
永続化の機能を持っている。すなわち、オンメモリのデータストアの欠点である、クラッシュ
したらデータが消えてしまうという欠点をカバーしていて、定期的にデータダンプをする機能
がある。

キーバリューストアのバリューの部分にデータ構造を格納することができる。
リスト、セット、ソート済みのセット、ハッシュなど。

memcachedは特定の番組をみた数万人のユーザーIDのリストなどの巨大なデータ構造の
データを扱うことが難しい。また、データの永続化ができないので、消えた時のために
永続化する仕組み(MySQLなど)を用意する必要があった。


文字列データの取得とセット、削除
取得:GET キー名
セット:SET キー名 値
削除:DEL キー名

数値型のデータのインクリメント、デクリメント
インクリメント:INCR キー名
デクリメント:DECR キー名

データのタイムアウト値の設定
タイムアウト設定:EXPIRE キー名 タイムアウト秒数

複数コマンドのアトミック実行(SQLのトランザクションみたいなもの、コマンドは全部成功
したか、全部失敗したかの2種類しか存在しないようにする)
MULTI
GETやSETなど、redisコマンドを複数記載
EXEC
でMULTIとEXECの間のコマンドをアトミックに実行
※どうやらロールバックはないので、途中で失敗して、どちらかのコマンドだけが実行されて
しまうということも発生するようだ。

まとめると、redisは
MySQLと比較するとデータアクセスは速いが容量は少ない
memcachedと比較すると値にハッシュなどデータ構造を格納することができ、メモリが
クラッシュしても大丈夫なように永続化の機能も持っている

という感じ。