概要
- Key Value Store として MongoDB 等と肩を並べる redis を復習を兼ねてもう一回使ってみる
- 今回は実際にサービス等での運用も想定した検証を行いたい
redis とは
他の KVS に比べると以下のような特徴があると思われる。
- レプリケーションが出来る
- 様々なデータ構造が扱える
- データの永続化が出来る
使ってみる
インストール
インストールはソースコードが配布されているのでダウンロードしてコンパイルしてインストールというステップを踏む。最近、個人的にサーバーの設定は出来るだけ Chef でやりたいので cookbook を使ってインストールを行う。cookbook はこちらから。Community Cookbook もアップされているのでどちらを使って頂いても良いかと…いや、Community Cookbook 版を使って下さい…。
とりあえず起動
redis-server
を起動する。
/usr/local/bin/redis-server
正常に起動すると以下のように弁当箱みたいなアスキーアートが表示される。
[1243] 15 Jun 13:20:26.651 # Warning: no config file specified, using the d fig. In order to specify a config file use /usr/local/bin/redis-server /pat .conf [1243] 15 Jun 13:20:26.654 * Max number of open files set to 10032 _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 2.6.13 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in stand alone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 1243 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-'
適当にデータを突っ込んでみる
redis-cli
を起動してデータを突っ込んでみる。
redis 127.0.0.1:6379> set kappa "ahoaho" OK
データを取り出してみる
同じく redis-cli
を起動してデータを取得してみる。
redis 127.0.0.1:6379> get kappa "ahoaho"
運用してみる
ソースコード内に redis.conf
というファイルが置いてあるので、環境に合わせて編集する。
デーモンとして起動する
redis.conf
に以下を記載する。
daemonize yes
ディスクへの書き出しを設定する
同じく redis.conf
に書き出し先のディレクトリパスを記載する。もちろん、記載したディレクトリパスを作成しておく。
dir /usr/local/redis
データの書き出しタイミング
データをどのタイミングで書き出すかは resis.conf
内の以下に記載されている。
# In the example below the behaviour will be to save: # after 900 sec (15 min) if at least 1 key changed # after 300 sec (5 min) if at least 10 keys changed # after 60 sec if at least 10000 keys changed # # Note: you can disable saving at all commenting all the "save" lines. # # It is also possible to remove all the previously configured save # points by adding a save directive with a single empty string argument # like in the following example: # # save "" save 900 1 save 300 10 save 60 10000
- 15 分以内に 1 個以上のキーが更新された場合
- 5 分以内に 5 個以上のキーが更新された場合
- 1 分以内に 10000 個以上のキーが更新された場合
上記のようなタイミングでディスクへの書き出しが行われるようだ。実際に試してみる。
# pwd /usr/local/redis # ls -l total 0 # redis-cli redis 127.0.0.1:6379> set kappa "ahoaho" OK redis 127.0.0.1:6379> get kappa "ahoaho" redis 127.0.0.1:6379> set inokara "ahoaho" OK redis 127.0.0.1:6379> get inokara "ahoaho" redis 127.0.0.1:6379> set huga "ahoaho" OK redis 127.0.0.1:6379> quit
# ls -l /usr/local/redis/ total 4 -rw-r--r-- 1 root root 93 Jun 15 14:03 dump.rdb
ログには下記のように出力される。
[6330] 15 Jun 13:58:40.451 * DB loaded from disk: 0.000 seconds [6330] 15 Jun 13:58:40.451 * The server is now ready to accept connections on port 6379 [6330] 15 Jun 14:03:41.044 * 10 changes in 300 seconds. Saving... [6330] 15 Jun 14:03:41.045 * Background saving started by pid 6577 [6577] 15 Jun 14:03:41.050 * DB saved on disk [6577] 15 Jun 14:03:41.051 * RDB: 0 MB of memory used by copy-on-write [6330] 15 Jun 14:03:41.146 * Background saving terminated with success
実際に書きだされたファイルを覗いてみる。
# od -c dump.rdb 0000000 R E D I S 0 0 0 6 376 \0 \0 001 q 001 t 0000020 \0 001 b 001 d \0 004 h u g a 006 a h o a 0000040 h o \0 001 h 001 j \0 001 p 001 o \0 \a i n 0000060 o k a r a 006 a h o a h o \0 001 w 001 0000100 e \0 005 k a p p a 006 a h o a h o \0 0000120 001 a 001 g 377 u 205 246 177 2 ; 245 031 0000135
ログファイル
素の redis.conf
はログ出力が標準出力に設定されているのでファイルにログを出力するように修正する。
loglevel notice logfile /var/log/redis.log
再起動
検証したバージョンでは基本的にはサービスの再起動についてはプロセスの kill -HUP
で行なっている。
まとめ
- 他の KVS をちゃんと使ったことが無いがとても簡単に利用すること出来た
- 定期的にディスクにも書き込んでくれているので永続化もちゃんとしている
- タイミングに関しても運用に応じて調整は可能なようで引き続き検証していければと思う