ちょっと話題の記事

高速データ管理!インメモリ KVS の Redis を使ってみた

2013.02.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

KVS (Key-Value Store) とは?

KVS とは Key-Value Store の略で、ざっくり言うとキーと値の組み合わせでデータを管理するしくみのことです。 RDB (リレーショナル・データベース) に代わるデータ管理手法 (NoSQL) のひとつで、近年注目を浴びています。

インメモリ KVS の Redis

Redis は インメモリ型の KVS です。インメモリ (オンメモリとも呼ばれる) とはデータをハードディスクなどには書き込まずメモリ上で管理するしくみのことで、RDB などに比べ非常に高速にデータを出し入れできるという特徴があります。ちなみに「remote dictionary server」の略らしいです。
今回は Redis をインストールして Ruby, Java, Node.js から使うまでの流れを超ざっくり紹介したいと思います。

Redis のインストール

Mac OS X にインストールする

Mac の場合は Homebrew を使うと簡単にインストールできます。

brew install redis
# 自動起動
mkdir -p ~/Library/LaunchAgents
cp /usr/local/Cellar/redis/2.6.4/homebrew.mxcl.redis.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

Amazon Linux にインストールする

Amazon Linux にインストールする場合は --enablerepo=epel を付けます。これは Amazon Linux AMI の Extra Packages for Enterprise Linux (EPEL) へのアクセスがオフになっているためのようです。

yum install -y gcc
yum install -y redis --enablerepo=epel
chkconfig redis on
/etc/init.d/redis start

Redis を使ってみる

redis-cli で遊ぶ

Redis をインストールすると redis-cli というツールをコマンドから使うことができます。以下のような感じです。

redis-cli
redis 127.0.0.1:6379> set key value
OK
redis 127.0.0.1:6379> get key
value

Ruby から使う

Ruby から使う場合はまず Gemfile にライブラリを追加します。

Gemfile

gem 'redis'

その後 bundle install は忘れずに。

bundle install

Redis からデータを出し入れするには Redis クラスをインスタンス化して使います。

redis = Redis.new
redis.set('key', 'value')
p redis.get('key') # value

超簡単ですね!

Java から使う

Java から使う場合は Jedis というライブラリがオススメらしいので軽く使ってみたいと思います。 まずは以下から jar ファイルをダウンロードしましょう。

http://github.com/xetorthio/jedis/downloads

あとはプロジェクトのライブラリに jar ファイルを追加して、完了です。以下の様な感じで使います。

Jedis jedis = new Jedis("localhost");
jedis.set("key", "value");
String value = jedis.get("key");
System.out.println(value); // value

超簡単ですね!

Node.js から使う

Node.js から使う場合は node_redis というライブラリを使います。npm でインストールして createClient() でクライアントを作成し、データの出し入れを行います。

# インストール
npm install redis
# 使ってみる
node
> var redis = require("redis"), client = redis.createClient();
undefined
> client.set("key", "value", redis.print);
true
> Reply: OK
> client.get("string key", redis.print)
true
> Reply: string val

超簡単ですね!

まとめ

いくつかの言語で使ってみましたが、いずれも超簡単に実装できました。今回は簡単にキー・バリューの格納・取り出ししかしていませんが、他にもコマンドはあります。公式がとっても参考になります。

http://redis.io/commands

Redis は環境構築も簡単ですし実装もめっちゃ楽なので、使ったことないかたはこの機会にぜひ使ってみてください!

参考