2022/09/12

AWSのRedisとは?memcachedとの違いや使い方を解説

 
  

Redisとは?


Redisとはin-memoryのKey-Valueストアのことです。データをディスク上に保存しないため高速でのデータアクセスを実現しています。そのためリアルタイム性を追求するシステムで活用されることが多いです。

一方でRedisはin-memoryであるが故に、データは揮発性データとなりRedisを再起動すると格納したデータは全て消えてしまいます。データが消えてしまうことを避けるためには、別途永続化する必要があります。

Redisの仕組み

Redisはメモリ内にデータが保存されるインメモリデータストアです。

ノードと呼ばれるRedisの最小構成をたくさん集めてクラスターを構成していて、endpoint addressをクラスターに向けることで、設定エンドポイントを変更することなく分散処理や、障害発生時のフェイルオーバーによるダウンタイムを最小限にすることを実現しています。

Redisのデータ構造7つ


AWSのRedisは単純なkey – value形式のデータストアとは異なり、多様なデータ構造への対応が可能となります。対応しているデータ構造はSets、Bitmaps、Lists、Sorted Sets、HyperLogLogs、Strings、Hashesの7つです。

多様なデータ構造に対応できるということは、システムで使っているデータを変換することなく、そのままRedisに保存することができるということです。

またデータを変換することなく保存ができるということは、データ変換用のコードを書く必要がないということです。その結果、遅い変換処理をなくすことや、変換時のエラー発生のリスクを減らすことができます。

次に、Redisで対応可能な7つのデータ構造を紹介します。

Redisのデータ構造1:Sets

Setsは、要素が順序を持たない集合であるデータ構造のことです。Sets型は集合であるため同じSets内ではデータが重複することはなく、確実にユニークを保つことができます。他のSets型データと和集合や差集合などの集合演算ができるので、非常に便利なデータ型です。

Redisのデータ構造2:Bitmaps

Bitmapsは、ビットマップデータを扱うデータ構造のことです。ビットマップデータは画素の集まり(ドット絵のようなマス目の集まり)で構成されており、画像処理の場面で登場することが多いです。

デジタルカメラで撮影したデータは、ビットマップデータになります。マス目ごとに色に変化をつけることができるため、複雑な画像であっても非常に綺麗に表現できることが特徴です。

Redisのデータ構造3:Lists

Listsは、要素が追加された順番に並んだデータ構造のことです。要素を追加する時は、順序の先頭か一番最後にデータを追加していきます。プログラミング言語によっては、配列と呼ばれることも多いです。

Lists型はプログラミングの中でも頻繁に登場するデータ型ですので、Listsをそのまま保存できるのは非常に便利です。

Redisのデータ構造4:Sorted Sets

Sorted Setsは、要素が順序を持った集合であるデータ構造のことです。こちらもSets型と同様に集合データなので、要素の重複は発生しません。

Sets型との違いは、Redisにデータを登録すると指定したKeyにより自動でデータの順番を並び替えてくれます。順位付けの際などに活用されることが多いです。

Redisのデータ構造5:HyperLogLogs

HyperLogLogsは、一意のデータを数えるためのデータ構造のことです。集合の中にある要素で、異なるものの数を推測するための構造になっています。

ビッグデータを扱う時は、必ずしも正確な値が必要とは限りません。だいたいの値がわかるだけでも十分な場面では、HyperLogLogsを使って推測の値を出すことで計算コストを減らし、処理の高速化に繋げることができます。

Redisのデータ構造6:Strings

Stringsは、テキストやバイナリのような文字列データ構造のことです。一般的な文字列は、全てStringsに該当します。またバイナリセーフであるため、画像ファイルなどのデータは全てバイナリという文字列に変換され、Redis上ではStringとして扱われます。

Redisのデータ構造7:Hashes

Hashesは、フィールドと値をマッピングしたデータ構造のことです。データの改竄などの確認やデータの検索の速度を上げるために、データを不可逆なランダムに見える値(ハッシュ)に変換しています。

ハッシュ値はどのような値であっても同じサイズの不可逆な値に変換するため、大きなサイズのデータを検索する際でも速い処理を実現することができます。

AWSのRedisの特徴5つ


AWSでは、完全マネージド型のRedis用Amazon ElastiCacheも提供されています。完全マネージド型のサービスは、定期的なアップデートやパッチ適用など全てAWSが行ってくれるため、管理タスクは一切不要となりアプリケーション開発に専念することができます。

最初からamazon vpcに配置されていたり、Redis auth認証tokenが暗号化されていたりと、データ保護などのセキュリティ面に関しても高いレベルの基準をクリアしたサービスが提供されています。

またAWSのRedisでは、オープンソースのRedisと非常に高い互換性を持っています。さらに他のAWSのサービスや機能と組み合わせて、AWSのRedisを使うことも可能です。そうすることでより高機能になり、かつ幅広いアプリケーションで利用できるようになっています。

Redisの特徴1:コードがシンプル

AWSのRedisは多様なデータ構造に対応しているため、アプリケーションで使っているデータをそのままRedisに格納することが可能です。Redisで使うことができるようにするための変換の処理を実装しなくていいため、ソースコードが少ない行数で済みます。

またpython、nodejs、c#などの多くのプログラミング言語に対応しているため、Redisを利用するために多くのシステムが大きな改修を入れることなく利用可能となっています。

Redisの特徴2:スケーラビリティ

AWSのRedisは、高いスケーラビリティが保証されています。スケールアップ、スケールダウンを調整するためのオプションが用意されており、それらを利用することで簡単にスケールの調整が可能になります。

最大でシャード数は500shards、ノード数は500nodesへのスケールイン、スケールアウトをダウンタイムなしで実施することができます。

スケールの拡張の際は、現在の利用を満たすことができるサイズにスケーリングされ、そのうち実際に利用した分だけが費用として支払う必要があります。

Redisの特徴3:バックアップの永続化

Redisはデータベースが停止するとキャッシュクリアされてしまうため、データが消えてしまいます。対策としてバックアップを取得することで、障害発生時に損失したデータをすぐに復旧することができます。

一方でデータベースをレプリケーションする場合は、データの保護に加え障害発生時のダウンタイムを減らすことができます。

フルマネージドのRedisの場合は、自動フェイルオーバー機能が備わっており、マルチazを有効にしてリードレプリカを作成することで実現できます。

そのため、もしprimary databasesに障害が発生しても即座にconnections endpointがリードレプリカにフェイルオーバーされて、Redisに接続できないなどのダウンタイムを最小限にすることができます。

このように、AWS Redisではデータベースを死活監視したり、設定してデータをバックアップしたりしてデータを保護しています。今回は、その中でもデータのバックアップと永続化に焦点を絞ってご紹介します。

AWSのRedisのバックアップによる永続化の方法には、RDBを使う方法とAOFを使う方法の2つがあります。AWSでは、RDBとAOFの両方でのバックアップをとることを推奨しています。

フルマネージドのAWS Redisを使う場合は、マネジメントコンソールにログインしてgui操作をするだけで簡単に自動取得の設定をすることができます。

RDB

AWSのRedisでは、特定のタイミングのスナップショットを取得し、RDBファイルとして保存することでバックアップを実現しています。スナップショットの取得方法には手動で実行する方法と、設定によって自動で実行する方法の2種類があります。

取得したsnapshotはs3に保存されます。データリストアの際は、そのsnapshotを使ってデータのリストアを行います。

AOF

AOFとはAppend-Only Fileのことです。AOFの機能を有効にすることで、AWS Redisの全てのデータ変更のコマンドをAOFに書き込みます。そうすることでAWS Redisが再起動された場合でも、キャッシュエンジンの起動タイミングでaofが再生されてRedisにデータが作成されます。

append-only filesは全てのデータ変更コマンドが記録されるため、非常にサイズが大きくなる可能性があります。ですので、AWSとしてはreplication groupを使用してディスク容量の圧迫を回避することを推奨しています。

Redisの特徴4:レプリケーション

AWSのRedisは、複数のレプリカサーバーにデータをコピーする機能が備わっています。このレプリケーション機能があることでデータの読み込みを複数のサーバーに分散して、performanceの向上や1つのサーバーが利用不可能になった時の素早い復旧を可能にしています。

レプリケーション数は5つまで作成することができるため、高い可用性を実現しています。

Redisの特徴5:拡張性がある

AWSのRedisは、オープンソースのRedisと高い互換性を持っています。Redisプロジェクトのコミュニティーは非常に活発で、非常に多くの言語、機能、クライアントへの対応も進んでいるため非常に拡張性に富んでいます。

オープンソースであるためライセンスの購入の必要もなく、すぐに利用することができます。

AWSのRedisの使い方5選


AWS RedisはオープンソースのRedis APIとの高い互換性があるため、オープンソースのRedisのソースコードを修正することなくAWS Redisで利用することが可能になっています。

そのため、オープンソースのRedisを使っていたアプリケーションをAWS Redisに移行するのも、非常に簡単でシームレスに移行することができます。

またAWS Redisは高速での処理を実現し、シンプルかつ多様な実装が可能となります。さらにフルマネージドサービスであるため、セキュリティやスケーラビリティの管理は全てAWSが担ってくれます。

そのため、AWS Redisは多数のユーザーが同時に利用するようなアプリやパフォーマンスを追求するようなアプリケーションをはじめとした様々なアプリケーションで採用されています。

AWS Redisが、具体的にどのような使い方をされているのかについてご紹介します。

Redisの使い方1:セッションストア

AWS Redisはユーザーの認証情報などのセッション情報を保存する、セッションストアとしてしばしば利用されています。これはAWS Redisの高い可用性と永続性、低レイテンシなどの特徴がユーザー固有のセッション情報(session info)を管理するために適しているためです。

SNSをはじめとしたオンラインのアプリケーションではユーザー固有のセッション情報を管理することが必須となることが多く、それらのアプリケーションではセッションストアの用途としてAWS Redisが利用されています。

Redisの使い方2:キャッシュ

AWS Redisは低レイテンシ、スケーラビリティに優れていることから、アプリケーションの負荷軽減を実現するためのキャッシングに利用されています。

ウェブページの画像データなどのキャッシングや、サーバーに高負荷をかけるSQL実行の結果のキャッシングなど、頻繁な処理や高負荷の処理によるアプリケーションへの負荷軽減を実現することができます。

結果としてアプリケーションのパフォーマンスの向上を期待できるため、多くのアプリケーションで利用されています。

Redisの使い方3:地理空間

AWSのRedisにはインメモリの演算機能が用意されているため、得られた地理空間データをリアルタイムで保存し、計算や分析などを高速で行うことができます。

そのため、GPSなどを使った位置情報を活用したアプリケーションを実現するために利用されることが多いです。

Redisの使い方4:Machine Learning

AWS Redisでは、大量のデータを高速で処理することが可能です。そのためMachine Learning(機械学習)の分野とも非常に相性がよく、機械学習モデルを構築する際にAWS Redisが利用されています。

データの異常値を検知してアラートを飛ばすなどリアルタイムに収集したデータをその場で処理、分析してその結果から次の動きを決めるようなアプリケーションなどでは重宝されています。

Redisの使い方5:リーダーボード

AWS Redisでは、ゲームのリアルタイムの順位表示をするリーダーボードを構築するために利用されます。

AWS RedisではSorted Setsと言うデータ型がサポートされているため、スコアなどが更新された場合に即時データをソートして保持することができます。

これによって、realtimeで順位をアプリケーションに反映することが可能となります。

Redisとmemcachedの違いや選び方


ElastiCacheのRedisとmemcachedは、同じインメモリのデータストアです。memcachedはシンプルを追求したデータストアです。一方で、Redisは豊富な機能を追求したデータストアです。

Redisは機能が豊富で、基本的にはmemcachedでできることはRedisでもできます。ですが、唯一memcachedができて、Redisにはできないことがあります。それがマルチスレッド処理です。ですので、分散処理による高速化を実現したい場合はmemcachedを選ぶ必要があります。

Redis 5.0 の新機能


Redisのversion5.0では、様々なパフォーマンスの改良やSorted Setsのコマンドやapiの追加が実施されました。現在5系のRedisの最新は5.0.6で、Redis全体では最近Redis6が登場しています。

その中でもRedis5.0の新機能の1番の目玉は、Redis Streamsというデータ構造の導入です。チャットのように履歴を保持するようなアプリケーションでの活用が期待できます。

今まではchatのメッセージはPub/Subの仕組みで管理されており、一度データを送信するとそのデータは消えます。ですが、Redis Streamsではデータを永続化するため削除されません。

そのためメッセージを通知する前に保留することが可能になります。

AWSのRedisを活用しよう


AWSのRedisは高速、かつ機能が豊富なデータストアであり、高い可用性が保たれているサービスです。そのため、リアルタイム性を重視するアプリケーションでは特に活躍します。

AWSではec2に自分でRedisをインストールするself managed Redisと、細かい設定やサービスの更新など多くを管理してくれるfull managed Redisがあります。

full managed Redisの場合は簡単な操作をするだけで誰でも利用を開始することができますし、定期的なupdateもawsが行ってくれるためメンテナンスcostが非常に低いと言えるでしょう。

awsでRedisを使う場合は、他のサービスと組み合わせて利用することができます。特にメトリクスを作成したリソースモニタリングやlog monitoringの仕組みを整えることで、errorをcheckすることも可能になります。

ElastiCache(Redis)には、指定のインスタンスタイプであれば一定の利用量まで料金が無料になる無料枠があり、かつクラスター作成までのtutorialも用意されているので気軽に利用することができます。

価格設定も比較的安価で小さい金額からでも利用が可能なので、ぜひAWS Redisを使ってみてください。

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】