redis, kyototycoon, memcacheの速度比較

redis, kyototycoon, memcache の速度を検証したみた。

redis はデフォルト設定のまま非同期ディスク書き込みです。
kyototycoon は以前にブログに記載した memcached plugin をONにして検証しています。

今回使ったサーバスペックはこちら。

CPU Intel(R) Xeon(R) CPU X3353 @ 2.66GHz (2 core)
メモリ 5993 MB
HDD 386 G
OS CentOS release 6.4


速度比較方法として、set, get, delete をそれぞれ100000回繰り返して
時間を測定してみました。

set
redis kyototycoon memcache
1回目 4.806134939 8.653364897 4.90881896
2回目 4.698001862 9.185384035 4.805595875
3回目 4.805799961 10.79264808 4.788790941


f:id:hiro1986:20130912172137g:plain

速度順:redis ≒ memcache > kyototycoon

get
redis kyototycoon memcache
1回目 5.041815996 9.39627099 4.501425982
2回目 5.034805059 9.86879015 4.534216166
3回目 5.085501909 9.124469042 4.482938051


f:id:hiro1986:20130912172148g:plain

速度順:memcache > redis > kyototycoon

delete
redis kyototycoon memcache
1回目 4.686045885 7.526252031 3.93459487
2回目 4.507641792 6.271402121 3.698310137
3回目 4.481452942 7.489821196 3.71783185


f:id:hiro1986:20130912172157g:plain

速度順:memcache > redis > kyototycoon

まとめ

やはり memcache が最速でしたが、redis もそれなりに速度がでました。

kyototycoonは毎回ディスクに書き込み永続性を担保していますが
redisはメモリ上のデータが一定量更新されると非同期でディスクに書き込みます。

それぞれメリット、デメリットがあるので、使用する場面によって使い分けるのが良いかなと。

smartyで全角カナを半角カナに変換

smartyで全角カナを半角カナに変換したときのメモ

半角カナ変換用のpluginをSmarty/libs/plugins以下に追加。

<?php
  function smarty_modifier_mb_convert_kana ($str)
  {
    return mb_convert_kana($str,"ka",mb_internal_encoding());
  }
?>

ファイル名は「modifier.mb_convert_kana.php」にしました。

templateファイル内で使う場合は

{$hoge = "テスト"}
{$hoge|mb_convert_kana}

vimが固まったとき・・・

操作ミスでvimの画面が固まってしまったときに
いつも戻す方法を忘れてしまうのでφ(・ェ・o)メモメモ

たまにやるのが、windowsの保存ショートカットキーの
"Ctrl + S" を押してフリーズ・・・。

これは、vim特有のコマンドではなく、Linuxのコンソール上
で "Ctrl + S" を押すとターミナルへの出力がロックされる仕様。

こんなときは焦らず

Ctrl + Q

locateのインストール

CentOS6.4にlocateコマンドをインストールしたのでメモ。

locateとは

ファイルを高速に検索できる。あらかじめ作成したデータベースを使って検索するため、findコマンドより高速に検索が行える。データベースはスーパーユーザー権限でupdatedbコマンドを実行して作成する。

yumからインストール

yum -y install mlocate

使用方法

locate file_name

上記コマンドを実行したところ、下記エラーが

locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory

updatedbしていなかったのが、原因でした。

updatedbしたところ正常に実行できました!

KyotoTycoon[memcached plugin]インストール

CentOS6.4にKyotoTycoonのmemcached pluginをインストールしてみた。

Kyototycoonとは

KyotoTycoonはプロセス組み込み軽量データベースライブラリであるKyoto Cabinetをネットワーク越しに利用出来るようにするKVSのサーバ。同じKVSで有名なmemcachedの場合データベースを全てオンメモリで処理しているため電源を落としたりプロセスを再起動させると保存していたデータが全部初期化されてしまう特徴がある。 KyotoTycoonはファイルにデータを書き込み永続的なデータ保存ができる「memcachedのデータ永続化版」の特徴を持っています。
データベースのホットバックアップやレプリケーションも出来るため耐障害性能のあるKVSとして利用価値があります。

KyotoCabinetインストール

yum install lzo-devel lzma-devel xz-devel
curl -L -o kyotocabinet-1.2.72.tar.gz http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.72.tar.gz
tar zxfv kyotocabinet-1.2.72.tar.gz
cd kyotocabinet-1.2.72
./configure --prefix=/usr/local/kyotocabinet --enable-lzo --enable-lzma
make
make install
echo /usr/local/kyotocabinet/lib > /etc/ld.so.conf.d/kyotocabinet.conf
ldconfig

KyotoTycoonインストール

yum install lua-devel.x86_64
wget http://fallabs.com/kyototycoon/pkg/kyototycoon-0.9.53.tar.gz
tar zxfv kyototycoon-0.9.53.tar.gz
cd kyototycoon-0.9.53
./configure --prefix=/usr/local/kyototycoon --with-kc=/usr/local/kyotocabinet --enable-lua
make
make install
echo /usr/local/kyototycoon/lib > /etc/ld.so.conf.d/kyototycoon.conf
ldconfig

起動コマンド(memcached puluginを有効)

/usr/local/kyototycoon/bin/ktserver -port 10001 -tout 10 -th 16 -log /var/kt/log/test_master.log -ls -ulog /var/kt/log/test_ulog -ulim 256m -sid 1 -pid /var/kt/log/test_master.pid -cmd /var/kt/bin -plsv /usr/local/kyototycoon/libexec/ktplugservmemc.so -plex port=11311#opts=f#tout=10 /var/kt/db/test_master.kch#opts=l#bnum=1000000#msiz=1g#dfunit=8


起動に関しては

/usr/local/src/kyototycoon-0.9.53/lab/ktservctl

をコピーして起動するか、daemontoolsを使うのがよさそう。

phpredisインストール

前回のブログ(Redisインストール)ではRedisのインストールについて書きましたが、今回はPHPから利用するためphpredisライブラリーをインストール

gitからソースを入手してインストール
git clone https://github.com/nicolasff/phpredis.git
phpize
./configure
make
make test
make install
extensionの追加
vi php.ini

+extension=redis.so
簡単なテストコードで接続確認
<?

$redis = new Redis();
$redis->pconnect('127.0.0.1', 6379);

$key = 'hello';
$val = 'world';

$redis->set($key, $val);
echo $redis->get($key) . "\n";

?>

以上です。

Redisインストール

Redis 2.6.12インストール

最新版のソースからインストール

wget https://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar zxfv redis-2.6.12.tar.gz
cd redis-2.6.12
make
make test

make testでtcl 8.5が必要とエラー

cd src && make test
make[1]: Entering directory `/usr/local/src/redis-2.6.12/src'
You need tcl 8.5 or newer in order to run the Redis test
make[1]: *** [test] Error 1
make[1]: Leaving directory `/usr/local/src/redis-2.6.12/src'
make: *** [test] Error 2

tcl 8.5インストールをインストール

wget http://prdownloads.sourceforge.net/tcl/tcl8.5.13-src.tar.gz
tar xzvf tcl8.5.13-src.tar.gz 
cd tcl5.8.13/unix
./configure
make
make test
make install

再度make testしてみる。
問題なかったのでmake install!!

make test
make install

which redis-server

これでインストール完了。
次は起動スクリプトの設定。install_server.shが用意されているので実行。

cd util
./install_server.sh

問題なく実行されたが、init.dの起動スクリプトの改行がおかしかったので修正。

vim /etc/init.d/redis_6379
%s/\\n/\r/g

起動してみる

/etc/init.d/redis_6379 start

最後にredis-cliコマンドで簡単な接続確認

redis-cli

redis 127.0.0.1:6379> set hoge foo
OK
redis 127.0.0.1:6379> get hoge
foo


これでインストールと起動まで完了。
次はPHPから利用する為に、phpredisを入れてみよう。