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です。
使い勝手は相当良さげです。