AWS ElastiCache Redisの特徴と用途と設定

ElastiCache Redisについて色々調べてみた記事です。

具体的には以下のことを調べてみました!

調べたこと
  • 特徴
    • 使うメリット
    • 注意点
    • memcachedとの比較
  • 用途
  • 可用性を意識した設定(クラスターモードの有無とか)

 

まずは特徴について記載していきます。

スポンサーリンク

ElastiCache Redisの特徴

まずはメリットについてです。

使う際のメリット

メリットは大きく2つ紹介します!

2つのメリット

高速に動作するデータストアです
有効期限(TTL)を設定できる

 

高速に動作するデータストアです

公式記事にミリ秒未満のレイテンシーと記載があります。

非常に高速です。これが一番のメリットかと思います。

Redis 用 Amazon ElastiCache(キャッシュ管理・操作)| AWS
Redis 用 Amazon ElastiCache は、Redis 互換のインメモリデータストアサービスで、リアルタイムアプリケーション向けのデータベース、キャッシュ、メッセージブローカー、およびキューとして使用できます。このサービスでは、スピード、シンプルさ、およびオープンソース Redis の多用途性と、Amaz...

Amazon ElastiCache for Redis は、ミリ秒未満のレイテンシーを実現する非常に高速なインメモリデータストアで、インターネット規模のリアルタイムアプリケーションを強化できます。

有効期限(TTL)を設定できる

有効期限(TTL)を設定できます。有効期限(TTL)を設定して登録したデータは、有効期限になると勝手に消えてくれます。

次に使う際の注意点を記載します!

使う際の注意点

2つの注意点

RedisはNoSQLであるという点
インメモリデータストア

RedisはNoSQLであるという点

NoSQLとは、リレーショナルデータベース(RDB)ではないデータベースです。

  • テーブルを他のテーブルとJoinして検索などリレーショナルな概念がそもそも存在しません。
    • リレーショナルな概念を捨て去ってRDBとは別物として考える必要がある

インメモリデータストア

すべてのデータがメモリ上に保持されています。メモリ上という特性上、最悪の場合、データが消えることもあります。以下のような感じです。

  • メモリ上にデータが保持されている
    • メモリ上だから処理が早いよ
      • メモリは揮発性だよね

また、メモリに乗り切るデータ量しか扱えません。

データがメモリに乗り切らない場合、以下のような挙動になります。有効期限(TTL)は設定しておいた方が良さそうですね。

  • 有効期限(TTL)を設定していれば、いい感じにデータ消去してくれる
    • 削除アルゴリズムはRedisの公式ドキュメントをご参照ください。
Key eviction
Overview of Redis key eviction policies (LRU, LFU, etc.)
  • 有効期限(TTL)が設定されていない場合
    • 手動でメモリ解放が必要
      • メモリ解放しないと新規にデータ追加ができない状況に陥ります

次はmemcachedとの比較をしていきます!

memcachedとの比較

Redisと同様に、memcachedも以下のような特徴を持ちます。

memcached特徴

高速で動作する
NoSQL
インメモリデータストア

Redisとmemcachedの違い

可用性の観点で違いがあります。

可用性の面ではRedisの方が優れています。

  • Redisはレプリケーションができる
    • レプリケーションしておき、プライマリノード+レプリカノードの構成にしておく
      • プライマリノードに障害があれば、レプリカノードがプライマリに昇格する
  • memcached
    • レプリケーション不可

次はRedisの用途についてです!

ElastiCache Redisの用途

2つの用途のご紹介

セッションストアとして使う
RDSのデータキャッシュ

セッションストアとして使う

特徴で記載した以下のようなことからセッションストアとしての用途が考えられます。

  • 高速
    • セッションストアは高速の方がサイトレスポンスが良くなるから良い
  • 有効期限(TTL)を設定できる
    • セッションは有効期限あるからTTL設定できると便利
  • データが消えてしまうことがある
    • 最悪消えてしまってもログインし直せば良いよね

という感じです。

RDSのデータキャッシュ

RDSのデータ(Select結果)のキャッシュとしての用途です。

RDSよりRedisの方が高速なため、サイトのレスポンス速度が向上します。

以下のようなイメージです。

  • 初回はRDSのデータを取得し、Redisに取得したデータを格納
    •  Redisにデータ格納する際は有効期限(TTL)を設定する
      • サイト表示はRDSのデータを使う
  • 2回目以降はRedisのデータを使用してサイト表示をする
  • 有効期限(TTL)によりデータがなくなった場合は、RDSのデータを取得し、Redisに取得したデータを格納

ECサイトのTOPページの商品情報など、以下のような特徴を持つ場合に有効と考えます。

  • よくアクセスされる
  • リアルタイムに表示内容を変更する必要がない

注意点としては、適切に有効期限(TTL)を設け、情報が古くなってしまわないようにすることです。

Redisへ情報格納する際は

  • キー:SQLをハッシュ化したもの
  • バリュー:SQLの実行結果

としておくのが良いと思われます。

次は、ElastiCache Redisの設定について記載します!

可用性を意識した設定(クラスターモードの有無とか)

インフラ的観点での設定について考えていきます。

細かく考えると難しいので、

簡単に「こういう時はこういう構成を考える」といった考え方のみ記載します。

開発環境とか本番でもRedisが落ちても問題ない場合

プライマリノードのみあれば良いので、以下の設定で作成します。

  • シャードの数:1
  • シャードあたりのレプリカ:0

本番環境の最小構成(クラスターモードなし)

プライマリノードとレプリカノードがあれば良いので、以下の設定で作成します。

  • シャードの数:1
  • シャードあたりのレプリカ:1

プライマリノードの障害時は、レプリカがプライマリに昇格します。

マルチ AZ による ElastiCache for Redis のダウンタイムの最小化 - Amazon ElastiCache for Redis
マルチ AZ を使用して ElastiCache for Redis のダウンタイムを最小限に抑えます。

本番環境のクラスターモードあり方式

以下を最小構成とします。

  • プライマリ:3台
  • レプリカ:3台

プライマリが複数ある(データが分散されて保持される)ため、負荷分散、可用性に長けています。

クラスターありの場合の注意点は以下の記事ご参照ください

クラスタに3ノード必要な理由 - Qiita
システムの可用性を高めるためにクラスタリング技術はよく使われます。 そのクラスタリングの推奨ノード数が3つ以上のソフトウェアは非常に多いのですが、その理由まではあまり詳しく書かれていません。 今回は、クラスタメンバー同士がお互いの...
Redis レプリケーションについて - Amazon ElastiCache for Redis
レプリケーショングループ内の各シャードには、単一の読み取り/書き込みプライマリノードと、最大 5 個の読み取り専用レプリカノードがあります。シャードの数が多くレプリカの数が少ないクラスターを作成できます。クラスターあたり最大 90 ノードです。このクラスター設定は、シャード 90 個およびレプリカ 0 個からシャード ...

まとめ

色々な場面でElastiCache Redisを使えそうですね。

可用性を意識した設定は良く考えて設定する必要がありますが、そこさえクリアすれば、高速なストレージを使用した開発が可能です。

同じNoSQLのDynamoDBの記事もよろしければ、ご参照くださいー

AWS DynamoDBの特徴と用途と設定(オンデマンド VS プロビジョニング)
DynamoDBについての記事です。 特徴について、「使うメリット」「注意点」「用途」について記載。用途について、具体的にどんな場面で使うかを記載しています。最後にDynamo DBの設定について、オンデマンドとプロビジョニングそれぞれどういったケースに向いているかを記載しています。