2013/04/27

RedisをOpenBSD 5.2に入れてみた覚書

試験的に作るアプリケーションのデータ構造が単純でリレーションも特に組む必要がない、データの変化はごく少量・低頻度でデータ全体のサイズも100MBにも達しない、但したまにある更新が同時アクセスになる確率が高い、と言う事で、KVSで保持する事を検討・試験するべく、RedisOpenBSD 5.2に入れてみました。書き込みが同時アクセスにならないのであればSQLiteで充分そうですが、今後の案件で役立つかもしれないのでKVSを試しました。

だいたいいつもデータ構造をRDBのテーブルにする時は、id(Primary Key), name, description(自由に使える備考欄), updated(レコードの更新時刻), disabled(レコードの無効フラグ)の構成 + 必要なカラムを用意するのですが、今回はidに相当するものとnameだけあれば良いので、KVSで試験してみようと。

コンパイルとインストール

/usr/local/srcでソースコードを展開してコンパイルして/usr/local/redisに入れる事にします。
# cd /usr/local/src ⏎
# wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz ⏎
...
# gunzip -c redis-2.6.12.tar.gz | tar vfx - ⏎
...
# cd ./redis-2.6.12
configureはないのでそのままmakeします。OpenBSDなのでgmakeでやります。

# gmake && gmake test ⏎
...
# gmake PREFIX=/usr/local/redis install ⏎
cd src && gmake install
gmake[1]: Entering directory `/usr/local/src/redis-2.6.12/src'
    INSTALL redis-sentinel

Hint: To run 'make test' is a good idea ;)

mkdir -p /usr/local/redis/bin
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
gmake[1]: Leaving directory `/usr/local/src/redis-2.6.12/src'
binディレクトリにコマンドが幾つかインストールされるだけで、manとかは入りません。

設定ファイルを準備

設定ファイルはソースコードのディレクトリにあるredis.confを/usr/local/redis/etcあたりにコピーしておきます。sentinel.confは今回は試験しませんが、コピーだけしました。それ以外にメモリダンプしたりログを出したりするディレクトリも作っておきます。
# mkdir /usr/local/redis/etc ⏎
# cp ./*.conf /usr/local/redis/etc ⏎
# mkdir /usr/local/redis/{sbin,var} ⏎
# mkdir /usr/local/redis/var/{data,log}
/usr/local/redis/etc/redis.confは、ソースコードについていたredis.confから下記の点を変更しました。

起動スクリプト

ソースコードのutils/redis_init_scriptをインストールしたディレクトリに合わせて変更して、sbin/serverとして置きました。

# cp utils/redis_init_script /usr/local/redis/sbin/server ⏎
# chmod a+x /usr/local/redis/sbin/server ⏎
# vi /usr/local/redis/sbin/server
スクリプトを用意したので、それで起動して接続したりログを眺めたりします。

# /usr/local/redis/sbin/server start ⏎
Starting Redis server...
# tail -f /usr/local/redis/var/log/server.log ⏎
Starting Redis server...
[16545] 27 Apr 12:48:44.587 * Max number of open files set to 10032
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 2.6.12 (00000000/0) 32 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in stand alone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 16545
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

[16545] 27 Apr 12:48:44.591 # Server started, Redis version 2.6.12
[16545] 27 Apr 12:48:44.591 * The server is now ready to accept connections on port 6379

接続してみる

同じホストから/usr/local/redis/bin/redis-cliを実行すると繋がります。別のホストから繋ぐ時は-h ホスト名で。-r 回数オプションを使うと、その後に続くコマンドを指定回数分だけ実行出来ます。
# cd /usr/local/redis ⏎
# ./bin/redis-cli ⏎
redis 127.0.0.1:6379> set neko kijitora ⏎
OK
redis 127.0.0.1:6379> quit ⏎
# echo 'set nyaa 1' | ./bin/redis-cli ⏎
OK
# ./bin/redis-cli -r 1000 incr nyaa ⏎
(integer) 2
(integer) 3
...
(integer) 1001
別のホストから接続する場合もredis-cliを使うと良いですが、telnetでも操作は可能です。
% telnet 192.0.2.12 6379 ⏎
Trying 10.64.19.254...
Connected to 10.64.19.254.
Escape character is '^]'.
get neko ⏎
$8
kijitora
get nyaa ⏎
$4
1004
set mikeneko mi-chan ⏎
+OK
get mikeneko ⏎
$7
mi-chan
^]
telnet> quit
アプリケーションのほうは、多分PerlのRedisDB使って書くかなぁというところです。

0 件のコメント:

コメントを投稿