Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.
RedisはいわゆるNonSQLの類で早いとの噂。
データをインメモリで処理するので超高速。
そのうえ、永続化もサポート(非同期)という素敵仕様。
イケイケエンジニャーの間では常識レベルらしいので、僕もやってみることにしました。
まずはお試し版。
Web上で動作するチュートリアルがあるのでガチャガチャ弄ってみましょう。
Try Redis

画面下にあるプロンプトにtutorialと打てばはじまります
一通り試して感覚を掴んだらいよいよ導入です。
幸いにしてbrewが使えます。
$ brew install redis
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/redis-2.8.9
######################################################################## 100.0%
==> Pouring redis-2.8.9.mavericks.bottle.tar.gz
==> Caveats
To have launchd start redis at login:
ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents
Then to load redis now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
Or, if you don't want/need launchctl, you can just run:
redis-server /usr/local/etc/redis.conf
==> Summary
🍺 /usr/local/Cellar/redis/2.8.9: 10 files, 1.3M指示通り、まずは起動後にredisが立ち上がるよう設定します。
$ ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents
終わったら、launchctlで先ほど設定したLaunchAgents下のredisを再読み込みします。
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
あとは
$ redis-cli
とやれば、CLIが起動します。
まずはhelpで確認。
127.0.0.1:6379> help
redis-cli 2.8.9
Type: "help @<group>" to get a list of commands in <group>
"help <command>" for help on <command>
"help <tab>" to get a list of possible help topics
"quit" to exit便利なことに、うろ覚えで先頭の文字を打ってTABをおせば補完してくれる便利機能つき。
たとえば、"help se"とやってTABを連打すると
- help SELECT
- help SET
- help SETBIT
- help SETEX
- help SETNX
- help SETRANGE
- help se
といった感じで候補を順繰りに出してくれます。便利!
値投入はset、取得はget。
127.0.0.1:6379> set num 12 OK 127.0.0.1:6379> get num "12"
構造は:で表現します
127.0.0.1:6379> set user:number:value 12 OK > get user:number:value "12"
リスト構造も使えます。末尾は「−1」指定
127.0.0.1:6379> rpush list 'hanako' (integer) 1 127.0.0.1:6379> rpush list 'taro' (integer) 2 127.0.0.1:6379> lrange list 0 -1 1) "hanako" 2) "taro"
頭にくっ付けるのはlpush
127.0.0.1:6379> lpush list 'ichiro' (integer) 3 127.0.0.1:6379> lrange list 0 -1 1) "ichiro" 2) "hanako" 3) "taro"
削除はdel
127.0.0.1:6379> del list (integer) 1 127.0.0.1:6379> get list (nil)
おわりに
一通り弄ってみました。
なんだかスクリプト言語弄ってる感覚でしたが...これはまぎれも無くDBです。
使い勝手は相当良さげです。