バージョン2.0がリリース
memcachedと“正反対”、Redisが仮想メモリをサポート
2010/09/07
KVS(キー・バリュー・ストア)に分類されるオープンソースのRedisの新バージョン、「Redis 2.0.0」が2010年9月5日にリリースされた。Redisはmemcachedと同様にキーと値のペアをメモリ上に保持するKVSの一種だが、3つの際立った特徴がある。1つはハッシュ以外のデータ構造もサポートしていることで、リスト型、集合型、順序付き集合型などのデータ構造が扱え、サーバ側でコレクションに対するpush/pop、コレクション同士のunion/intersection、数値のincr、decrなどの操作がアトミックに行える。バージョン2.0では複数の操作を1つにまとめてアトミックに操作するコマンドも増えている。
もう1つのRedisの特徴は、マスター・スレーブによるレプリケーション設定ができ、リード側のスケールアウトが容易にできること。
そして3つ目の特徴は、メモリ上のデータセットをプライマリとしつつ、非同期でディスクへ書き出しできること。ディスク書き出しのタイミングは、設定で経過秒数や累積オペレーション数を指定できる。
RedisはCで各種データ構造を実装したものをデーモンとしたようなソフトウェアで、リード・ライトともに非常に高速なのが特徴。ただ、実メモリに乗り切らないデータセットは扱えないことから利用局面が限定的だった。バージョン2.0では、新たに独自に仮想メモリ機構を実装。実メモリに乗り切らないデータをディスクへ書き出す仕組みを取り入れた。
これはOSのスワップの仕組みそのものだが、Redisでは、あえて独自で実装したという(実装にはLinuxカーネルを参考にしたという)。理由の1つは、データ構造が分かっている分、シリアライゼーションによる圧縮効果が高く(最大で10倍程度)、OSに依存するよりもはるかに効率がよくなること。もう1つの理由は、キー・バリューのうち、キーだけはすべてメモリ上に保持するという設計が可能なため。キーがすべてメモリに乗っていることから、Redisの高速性は保たれるというわけだ。また実際のバリューのほうがいくら大きくなっても、メモリ消費量はキーの数にだけ依存することになり、100万キー当たり160MBのメモリ消費で済むという。
MySQL+memcachedと正反対のアプローチ
メモリに乗り切るデータセットであれば、RDBMSを使うよりも高速というのがRedis登場時のウリだったが、Redis2.0が仮想メモリをサポートしたことで、データサイズによらずRedis単体で「MySQL+memcached」という定番のアプローチと似た構成が可能になる。つまり、頻繁にアクセスのあるホットデータはメモリ上から読み、そうでないものはディスク上から読む、という構成だ。ただ、Redisプロジェクト創始者のSalvatore Sanfilippo氏は、仮想メモリを実装したRedis2は、memcachedとは、ちょうど正反対のアプローチになると指摘し、いくつかメリットを挙げている。
1つは、キャッシュのインバリデーションが不要なこと。メモリ上のデータがプライマリであるため、メモリ上にデータがある限り、それを読めば済む。MySQL+memcachedでは、データがキャッシュ用に複製されるというプロセスがあるため、何らかの仕組みでキャッシュの整合性を保つ必要がある。また、ページネーション処理などで複雑な条件付きのクエリをキャッシュするのは難しいので、Redisのようにメモリ上のデータ操作が可能な実装のほうが扱いやすいのだ、ともSanfilippo氏は書いている。
もう1つの指摘は、MySQL+memcachedが主にリードだけスケールしやすいのと異なり、Redisはライト処理でもスケールするということ。
Redisは2009年2月にSalvatore Sanfilippo氏が開始したプロジェクト。その後、2010年3月にヴイエムウェアがSanfilippo氏を雇入れ、開発ペースが上がっていたようだ。RedisはBSDライセンスで配布されていて、ANSI C対応コンパイラ、POSIX準拠のシステムで利用できる。
関連リンク
情報をお寄せください:
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|
キャリアアップ
- - PR -
転職/派遣情報を探す
「ITmedia マーケティング」新着記事
CMOはつらいよ マッキンゼー調査で浮かび上がるAI時代の厳しめな業務実態
生成AI、研究開発、価格戦略……。慢性的なリソース不足の中でマーケターの業務範囲はま...
「リンクレピュテーション」とは? SEO対策や注意点もわかりやすく解説
「リンクレピュテーションって何のこと?」「なぜ重要?」「リンクレピュテーションを意...
MAツール「MoEngage」 DearOneが日本語版UI提供へ
NTTドコモの子会社であるDearOneは、AI搭載のMAツール「MoEngage」の日本語版を2025年1月...