memcachedとredisについて


こんにちは

村上です。

ちょっと高速に読み書きできる共有ストレージが案件で必要になったので、KVSのmemcachedとredisを触ってみました。

インストール

どちらもyumでインストールできると思います。

インストールが終わったら起動です。

今回はどちらもRubyから操作します。

ってして、もしくはGemfileに書いて「bundle install」 準備はOK
ちなみに「dalli」はmemcached用のgemです。
(読み方は「ダリ? ダルリ!?」)

memcached

まず、memcachedのdalliですが、こんな感じです。

redis

続いてredisですが、

ってことで、redisの場合は、オブジェクトは文字列となって取得されちゃいます。
なんで、下記のようなコンバートを実施

こんな感じでいけそうです。
あと、redisの場合は

にする必要があります。メソッドが変わって、dalliとは引数の場所が違うことに注意です。
decodeのメソッドですが、nilの場合はエラーになるので、nilを考慮した作りが必要です。

ちなみにnilをセットした時、動きが違いました。

速度差

KVSなんで、高速の読み書きが求められます。
今回は3秒間でどれだけ読み書き(KVSへの値セットと値取得を1回ずつ行う)ができるかを測定します。

memcached

redis

結果は下記の通り
10回の平均です。

3秒間での読み書き回数
memcached 19958.5
redis 19627.5
redis コンバートなし 20638.5
DB postgres 956.5
ハッシュ 3402237.3

KVSだけではそれほど差がなかったので、DBとハッシュも比較対象に追加してみました。
今回はストレージがローカルにあるのでこの数字が出ましたが、ネットワーク越しにあれば、もう少し速度は低下すると思います。

速度は
メモリ > KVS > DB
でそれぞれ200倍ほどの差があるみたいですね。

当然ちゃ当然の結果ですが。

KVSを使うことがあれば参考にしてください。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です