on memoryで動きつつディスクにスナップショットをとってくれるRedisが便利そうって話

リアルタイム性の高いサーバを書いていると、RDBでは要件を満たさないことが多くて、そういうときにいわゆるNoSQLなプロダクトを使うことがよくあるわけだけれど、今日調べたRedisについてメモ。

Redisも最近よく聞くNoSQLなプロダクトのひとつで、on memoryで動くKeyValueSoreサーバである。on memoryで動くKVSと言えばmemcachedとかが有名だけど、memcachedのデータが(on memoryである以上当然なのだけれど)揮発性であるのに対して、Redisのデータはディスクにスナップショットがとられる(スナップショットをとるタイミングはユーザが設定可能)ので、persistentなデータを取り扱うのに向いてる。

persistentなデータを扱えるKVSって言うと他にもflareとかkumofsとかのmemcached互換なプロダクトが有名どころだけれど、これらとRedisの大きな違いとしては、flareやkumofsが単純なデータ構造を扱うKVSであるのに対して、RedisはLIST(連結リスト)とかHashMapなどのデータを扱うことができる。こういうことができると、複雑なデータ構造をリアルタイムに扱わないといけないMMOなんかのニーズに結構マッチするんじゃないかなぁと思う。

当然ながら、Storageとしての機能がmemcachedよりも高性能(というか、そもそも想定している使い方が全然違う。memcachedは名前の通りcacheに使うことを想定しているし、Redisはpersistentなデータのストレージとして使うことを想定している)なので、flareやkumofsと違って通信プロトコルmemcached非互換である。ただし、Redisのクライアントとして動くライブラリが主要な言語にはそろってるので、このあたりは導入のコストにはあまりならないんじゃないかな。