トップ OSS紹介 Redis

Redis

サポート対象

NRIのOpenStandiaが提供するRedis最新情報

Redis情報

Redisとは

Redis(レディス)は、ANSI Cで書かれたオープンソースのインメモリデータストアで、REmote DIctionary Serverの略称です。
Redisは、イタリアのSalvatore Sanfilippo(サルヴァトーレ・サンフィリッポ)氏により2009年に開発されました。
当初はWebのログをリアルタイムで解析するツールをスケーリングすることが目的でしたが、いろいろなアイデアが追加されたことによりRedisとして誕生しました。
Redisの正確な発音はRedとissを合わせたものとされています。
Salvatore Sanfilippo氏は、2020年6月に開発責任者を辞任しており、現在(2021年9月現在)はRedis社とコミュニティメンバーにより継続して開発が行われています。

従来のRDBMSとは異なり、データをキーとバリューという形式で保存するため、キーバリュー型NoSQLに分類されます(Redisのドキュメントでは、キーバリューストアではなく、データストラクチャーサーバと呼んでいます)。
バリューには文字列や数字の他にリスト、ハッシュ、セット、ソート済みセット、ビットアレー(ビットマップ)、ビットフィールド、ストリーム、Geospatial、HyperLogLogsを取ることができ、他のキーバリュー型NoSQLと比較しても豊富なデータ構造をサポートしています。

Redisはクエリに対してメモリで応答するため、非常に高速に応答できます。
安価なハードウェアでも1秒間に数万リクエストを処理でき、キャッシュやメッセージングシステムの用途で広く利用されています。

Redisはマスタースレーブ型レプリケーション(データ複製)をすることができ、マスターノードのデータをスレーブノードに複製することができます。
アプリケーションは、スレーブからデータを読むことにより、読み込み負荷分散ができます。

Redis 3.0からはRedis Clusterという機能が導入され、シャーディング(水平分散)をすることができるようになりました。

この方法では、各ノードがどこにデータが格納されているかを記憶し、リクエスト受信時に自分のノードにデータがない場合、クライアントに対してデータの存在するノードを教えます。(下図参照)

他のキーバリュー型NoSQLと比較すると、Redisは軽量・シンプルで扱いやすく、水平分散の機能が部分的であるため、比較的小規模で利用するのに適しています。また、データ型が豊富なため、複雑なデータを格納する要件がある場合にも適しています。

主な機能

非構造データ格納

事前にデータの構造を定義すること無く、データを格納可能です。

高速なレスポンス

データベースに対する問い合わせにはメモリで応答するため、高速なレスポンスが可能です。
安価なハードウェアでも1秒間に数万リクエストを処理できるため、キャッシュ層として広く利用されています。

軽量で簡単

ひとつのバイナリで完結しているため、サイズも650Kbyteと非常に軽量です。

出版・購読のサポート

予めクライアントがキー(およびキーパターン)に対して、購読の登録をしていると、 そのキー(およびキーパターン)に対してデータの更新(出版)があった際に即座にデータを受信可能です。

レプリケーション(データ複製)

Redisはマスタースレーブ型レプリケーション(データ複製)をすることができ、マスターノードのデータを非同期でスレーブノードに複製可能です。
アプリケーションは、スレーブからデータを読むことにより、読み込み負荷分散が可能です。

シャーディング(水平分散)

Version 3から実装されたRedis Clusterを用いることにより、シャーディングが可能です。

データ永続化

データに対する変更はメモリで応答し、それとは非同期でディスクに書き込まれます。
書き込むタイミングについては、前回書き込みからの経過時間と更新回数の2つの値を設定可能です。
データの更新を追記型ログに書くモードが選択可能で、その場合必ずデータは永続化されますが、応答速度は低下します。

パイプライン

サーバの応答を待たずにコマンドを発行可能です。

期限付き保管

データに期限を付けて、期限が切れたデータを自動的に引き落とし可能です。

データ記憶容量制限

データの記憶容量を定め、それよりも多くなった場合に様々なアルゴリズムに従って、データを自動的に追い出すことが可能です。
利用できるアルゴリズムは、LRU、ランダム選定、生存期間順、などを選択可能です。

トランザクション

複数のオペレーション(データ変更、インクリメント、配列への PUSH)を、一貫性を持ちながら実施可能です。

LUAスクリプト

LUAスクリプト言語をクエリ内で評価可能です

セキュリティ

Redisはシンプルなクライアント認証のみを提供し、データの暗号化 や、クエリのエスケープは提供していません。
信頼されたネットワーク内での利用を前提としており、直接インターネットに晒すことは推奨されていません。
なお Redis 6.0からは、ACLがユーザごとに設定可能となりました。
また、SSL/TLSがオプション機能としてサポートされています。

Redisのデータ型と主な操作

格納できるデータ

主に可能な操作

String

id : "watanabe"

CRUD、インクリメント、デクリメント、文字列連結、部分文字列

Hashes

watanabe :{ name : "watanabe"
      password : "hoge" }

CRUD、インクリメント、存在確認

Lists

tweets :["good-morning", "hello"]

PUSH、POP、要素数、部分取得、部分削除、他の配列への要素渡し

Sets

friends : { "Yamada", "Nomura" }

CRUD、和集合、積集合、差集合、存在確認、ランダム取得

Sorted sets

friends : { "Nomura", "Yamada" }

CRUD、順位取得、部分取得

Bitmap

flags: 00101000

オフセットを指定した値指定

HyperLogLogs

>pfadd hll a b c d
>pfcount hll

PFADD,PFCOUNT、PFMERGE

Geospatial

>GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania" (integer) 2

GEOADD、GEODIST、 GEOHASH、GEOPOS など

Stream(Redis5から)

>XADD mystream * sensor-id 1234 temperature 19.8 1518951480106-0

XADD、XRANGE、XREVRANGE、XACKなど

Redisの主な制約

データ容量は物理メモリ量

Redisは物理メモリ以上のデータ量を扱えません。 (仮想メモリはRedis 2.6以降では非推奨)

トランザクションのロールバック

トランザクションのロールバックはサポートされていません。「永続化モード」で利用しており、トランザクション中にサーバがダウンした場合、 部分的にデータがディスクに書き込まれた状態になります。この場合「redis- check-aof」ツールを用いて部分的に書き込まれた部分を取り除く必要があります。

ノードを超えた集合演算

水平分散環境において、ノードに分散しているデータに対して集合演算はできません。

Redis Clusterの最小推奨構成

マスタースレーブ型のレプリケーション×3=6台

類似プロダクト

OSSではmemcached、Riak、商用製品ではOracle NoSQL Database、クラウドサービスではAmazon ElastiCache、Microsoft Asure Redis Cache、Google Could Datastoreがあります。

動作環境

ANSI C言語で書かれており、外部依存性もないため、C言語実行環境であれば動作します。

推奨環境

  • Linux (最も推奨)
  • FreeBSDやmacOSといったPOSIX準拠システム
  • SmartOSのようなSolarisシステム(コミュニティーはベストエフォート対応)

コミュニティーではサポートしていない環境

  • 64bit Windows

サポート言語

  • Python
  • C#
  • Java
  • Go
  • Node.js

Redisのライセンス

Redisのライセンスは、「三条項のBSDライセンス」に基づいて公開され、営利、非営利を問わず、誰でも自由かつ無償で利用・改変・再配布できるようになっています。 一部のサード・パーティー製のソースコードには、異なるBSDまたはBSD互換ライセンスが含まれています。

オープンソース年間サポートサービス

OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。

お気軽にお問い合わせください

関連OSS

  • Riak

    Riak

    リアック。高可用性、スケーラビリティ、フォールトトレランスを簡単な操作性で実現するNoSQLの分散型Key-Valueデータストアです。

  • Neo4j

    Neo4j

    ネオフォージェイ。データの構造が従来のリレーショナルでなくグラフ構造を持ったデータベースです。

オープンソースに関する様々な課題、OpenStandiaがまるごと解決します。
下記コンテンツも
あわせてご確認ください。