Redisとは?
- 「REmote DIctionary Server」の略
- Key-Value型のNoSQLデータベース
- クライアントサーバモデル を採用した インメモリデータベース
- 様々なデータ構造(list、hash、string、set等)をサポートする。
- 同様の用途のミドルウェアに「Memcached」があります。
インメモリデータベースとは?
全てのデータをPCのメインメモリ上に展開して動作します。(MySQL等のRDBMSはディスク型データベース)
特徴
1プロセス、1スレッドで動く
全ての動作がシングルスレッドでMySQLのように並列処理はできません。なので、必然的に全てのデータ操作は排他になります。
データの永続化も可能。
パフォーマンスに影響が出るので全てのデータを永続化することはおすすめできないですが、使い所に応じてやると良いでしょう。
RDBMSに保存
save コマンド (または設定ファイル) でスナップショットをRDBMSのディスクに保存することで可能
AOF(Append Only File)に保存
実行時の全コマンドを保存することが可能です。
メリット
パフォーマンス向上を期待できる。
全てメインメモリ上にデータがあるのでアプリケーションから高速なアクセスが可能になります。
主な用途
- アプリケーションのセッションや、キャッシュ等の一時的な保存先として指定する用途で主に使われます。
- 商品データをリスト化しておきリアルタイムに更新するというようなリアルタイム処理でも使います。
- トランザクションが必要な課金系なデータはRDBMSに保存し、処理の結果はRedisに保存しておくと言う構成が多い。
- 出版/購買モデルにおけるメッセージブローカ的な役割
デメリット
常にメモリを消費し、メモリに乗るデータしか扱えない。
メモリに乗り切るデータしか扱えない。なので、クラッシュセーフではない。
データが消える。(永続データは保持するのが苦手)
数分でデータが消えてしまいます。データの消失が絶対に許されないシステムでは採用はできません。
Railsへの導入
Gemfileに下記を追加して「bundle install」を実行します。
1 2 |
gem 'redis-actionpack' gem 'hiredis' |
設定
「config/initializers/session_store.rb」に対して下記のような設定をします。driverに「hiredis」を使うことでより高速に接続することができます。(C言語で記述されているため。)
1 2 3 4 |
Rails.application.config.session_store :redis_store, expire_in: 43200, servers: { url: AWSの「ElastiCache」のURL, driver: hiredis } |
URL
AWSのElastiCacheで作成したRedisサーバのURLを指定します。
この記事へのコメントはありません。