1. ホーム
  2. 記事一覧
  3. Redisとは?

2024.03.14

Redisとは?

こちらの記事では、Redisについて解説します。

Redisは、データベースの一種です。データベースの種類はいくつかに分類することができ、その中でもRedisは、NoSQLの仲間です。一般的によく知られているMySQLやPostgreSQLなどのRDBと何が違うのか、メリット、デメリットを解説していきます。

本題のRedisの話に入る前に、RDBとNoSQLの違いについておさらいします。

RDBとは?

RDBは、「Relational DataBase」の略で、データベースの一種です。関係データベースとも呼ばれます。RDBはデータをExcelのような行と列で構成する表で管理し、それを複数持つことで必要なデータを組み合わせ、複雑なデータを扱うことができます。

RDBはMySQLやPostgreSQLなどのRDBMS(Relational DataBase Management System)によって管理されています。

代表的なRDBMS

  • MySQL
  • PostgreSQL
  • Oracle Database
  • SQL Server
  • DB2

RDBのメリット

  • SQLにより複雑な操作が可能

    SQLとは、RDBMSを操作するための言語です。RDBMSは、MySQL・PostgreSQL・SQL Serverなどいくつかの種類があります。それぞれのRDBMSでSQLの記述方法は若干異なる部分はありますが、基本的な部分は同じなため、全てのRDBMSはこのSQLによって操作が可能です。

    また、上図のように同一の形式のデータをテーブルという単位で管理し、テーブル同士を結合することでより複雑なデータの取得が可能となります。

  • ACID特性によるデータの安全性

    RDBMSは、ACID特性に基づいて設計されており、データ処理の一貫性等が保証されています。ここでいう一貫性とは、処理が正しく実行されればその結果が表示され、処理が正しく実行されなければ前の状態が表示される性質のことです。

    AさんがATMから、Bさんの口座に現金を1000円振り込む例を考えてみます。

    AさんがATMからBさんの口座に現金を振り込む処理の最中に停電や、システムの障害が発生したとします。この場合、全ての処理が完了していないので1000円は処理をする前のAさんの口座に残った状態が表示されます。仮に障害が発生した時点でBさんの口座への入金処理が完了していれば、Bさんの口座に1000円がプラスされます。

RDBのデメリット

  • 処理速度が遅い

    RDBのメリットで複雑な処理が可能と説明しましたが、これはデータ取得時に内部で複雑な処理をすることで実現しています。しかし、複雑な処理をするには時間もかかってしまうため、データ量が増えれば増えるほど処理速度が遅くなります。

  • 分散管理時にデータの書き込みができない

    負荷分散やレスポンスを早めるために、RDBを複数台(A、B)にしたとします。データの読み込みは、AとBで同じデータを持っているため可能です。

    一方で、書き込みですが、RDBのメリットはデータ処理の一貫性が保証されていると説明しました。一貫性が保証されているということは、AとBで常に同じデータを持っている必要があります。そのためAにデータの書き込みをするとBにも同じ書き込みをする処理が必要になります。これでは非常にコストがかかってしまうため、RDBは分散管理には不向きです。

RDBが適している分野

データを表形式で格納するため、以下のような分野に適しています。

  • 社内データの管理用データベース
  • 顧客情報の管理データベース
  • 生産管理システムのような複雑な情報を扱うもの

NoSQLとは?

NoSQLは「Not Only SQL」の略で、RDBのような関係データベース以外のデータベースを指します。RDBと異なり、テーブルやテーブルが持つ属性(名前、年齢、部署など)を定義せずにデータを格納することができます。そのため、データアクセスにSQLは使用しません。

RDB が持つ「大容量データを取り扱う際の処理速度が低下する」という課題を解決する新しいデータベースです。

NoSQLの種類

  • キーバリュー型

    キーバリュー型はデータを識別する一意のキーと、キーに対応するバリューで構成されます。バリューに関しては、データごとに異なっても問題ありません。キーとバリューだけの構造のため、処理が高速で容量も少なくなります。ただし、複雑な検索には適していません。

  • カラム指向型

    カラム指向型は、キーバリュー型にカラム(列)の概念を持たせたモデルです。キーが複数のカラムを保持しており、随時追加可能です。

    列でデータを扱うため、データの集計や、条件を満たす列を検索するといった操作が容易にできます。

  • ドキュメント指向型

    キーとJSONやXMLのドキュメント形式のデータを組み合わせた構成です。ドキュメントを埋め込めるため、1レコード内に複雑な階層関係を含めることができます。そのため、キーバリュー型よりも複雑なクエリが可能です。

NoSQLのメリット

  • 処理が高速

    NoSQLが必要とされる理由の一つとして、RDBの低速な処理が上げられます。RDBはデータ同士が関連しているためデータが増えれば増えるほど、処理が低速になります。一方NoSQLはデータ同士の関連はなく、非常にシンプルであるため処理を高速に行うことができます。

  • スケールアウトしやすい

    スケールアウトとは、システムを動作させるために、サーバーの台数を増やし処理能力を高めることです。RDBの場合、データの一貫性が必要になるためスケールアウトは不向きですが、NoSQLではデータの一貫性を気にする必要はないためスケールアウトに適しています。

NoSQLのデメリット

  • データの一貫性を保つことができない

    NoSQLのメリットの一つとして、スケールアウトに適していると説明しました。これは言い換えるとNoSQLはデータの一貫性を保つことができないため実現できます。

  • 複雑な処理に弱い

    単純なデータを高速で登録、読み込みは得意ですが、複雑な処理には不向きです。

NoSQLが適している分野

NoSQLは大量のデータを高速に扱うのが得意なため、以下のような分野に適しています。

  • 大量のデータを処理するIoTのシステム
  • SNSの分析

Redisとは

Redisとは、NoSQLのキーバリュー型の一つで、メモリ上でデータを管理するインメモリデータべースです。

インメモリデータベースとは

インメモリデータベースとは、データをハードディスクなどに保存するデータベースと異なり、メモリ上でデータを管理するデータベースのことです。

メモリはハードディスクに比べ処理速度が非常に高速なため、インメモリデータベースは一般的なデータベースに比べ、データの読み書きを高速に処理できるメリットがあります。

メモリ上でデータを管理するデメリットも勿論あります。メモリはハードディスクに比べ容量が非常に小さいため、大きなデータを扱う場合、他の処理に使用するメモリの容量が小さくなります。またメモリは揮発性なため、なんらかの障害で給電が途切れると保存しているデータが全て消失してしまいます。

Redisの特徴

  • 複数のデータ型に対応

    一般的にキーバリュー型では、キーに対して文字列値を関連づけてデータを保存しています。それに対して、Redisではキーに対して以下のような複数のデータ型の値を保持することができます。これにより、各言語で取得したデータをそのまま使用することができます。

    Strings(文字列型)

    Lists(リスト型)

    Sets(セット型)

    Hashes(ハッシュ型)

    Sorted sets(ソート済セット型)

    etc…

  • 不整合が生じない

    Redisはアトミックな性質を持つデータベースです。

    これはトランザクション処理のように複数の操作を一連の流れで実行する場合、処理の途中で障害が発生した際は処理を実行する前の状態に戻ります。一連の処理が全て完了するか、全く実行されないことが保証されています。

  • データの永続化

    メモリ上でデータ管理するインメモリデータベースのデメリットとして、給電がストップすると全てのデータが消失するとすでに説明しました。Redisではこの欠点を補うための仕組みがあります。

Redisのデータ永続化

Redisにはデータを永続化するオプションが提供されています。これによりコンピュータを停止したとしても、起動時にデータを復元することができます。

  • RDB

    RDBでは指定した間隔でデータのスナップショットを保存します。RDBは、バックアップファイルがコンパクトであるというメリットはありますが、一定間隔のスナップショットでの保存のため、一部データが消失する可能性があります。そのため、データの消失が許されない場合には不向きです。

  • AOF

    サーバーが受け付けた全ての書き込みコマンドを保存します。デフォルトでは秒単位で、データをファイルに保存します。これは、RDBを使用するよりもデータの消失を少なくします。そのため、データの消失を極力無くしたい場合に使用されます。

    ただし、実行速度が低下するデメリットもあります。

レプリケーション

Redisには負荷分散や耐障害性を目的とした機能が提供されています。これをレプリケーションと呼び、Redisではマスタースレーブレプリケーションが採用されています。

マスターは読み書きの機能を持つメインのサーバーで、読み込み専用のスレーブサーバーにマスターのデータをコピーします。これにより、参照先が分散されるため負荷分散を実現できます。マスターは複数のスレイブを持つことができ、万が一マスターに障害が発生した場合は、スレイブの内の一つがマスターとなることで、システムを継続することができます。

Redis クラスター

Redisはメモリ上でデータを管理するインメモリデータベースのため、容量が少ないというデメリットがあります。このデメリットを解決するために、サーバーを複数台用意し、これらをまとめて一つのデータベースと見なすことで解決しています。

データを複数台に分散させて管理することをシャーディングと呼び、Redisクラスターはシャーディングを管理します。Redisクラスターは複数のノードで構成され、各ノードはslotという識別子が付与されたデータを分散させて保持します。

例えばノード1、ノード2、ノード3があり、ノード1は0-5000、ノード2は5001-10000、ノード3は10001-15000のスロットを保持しているとします。

ユーザーが、5002番のスロットのデータが欲しいと命令すると、3つのノードの内のどれかに命令が行き、仮に命令を受けたノードが5002番のデータを保持していなければ、ノード間でやり取りがされ最終的に5002番のデータを持つノードからデータが返されるという仕組みです。

まとめ

以下は、Redisについてまとめた結果です。

  • Redisとはキーバリュー型のNoSQLで、インメモリデータベースです。
  • 特徴としては、複数のデータ型に対応、不整合が生じないなど、一般的なNoSQLの弱い部分を補う機能が提供されています。
  • レプリケーションやRedisクラスターなどの機能が提供されていることも魅力の一つです。

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事