0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Railsにおけるキャッシュストア比較表

Last updated at Posted at 2022-06-05

比較表

主にメリット・デメリットを比較したり、利用シーンをまとめてみました。

                                 FileStore   MemoryStore   MemCacheStore   RedisStore 
プロセス間共有
スレッドセーフ
ホスト間共有
無料
expires_in可否
速さ やや速い 速い 遅い 遅い
削除アルゴリズム 手動で削除する必要あり LRU(LRU: Least Recently Used) LRU LFUやLRUを選択
利用シーン 中規模サイトかつホスト数も少ない場合 キャッシュデータが小さい時(20MB以下) ホストが多い場合
大規模なアプリケーション
ホストが多い場合
大規模なアプリケーション
注意点 ディスクを圧迫 メモリを圧迫 キャッシュデータ制限
仕組み 特定のファイルに保存していく スレッド毎にRAMに保存していく Memcache serverに保存していく Redis serverに保存していく

速度面


遅い <——————————————————————————————————————————> 速い

RedisStore, MemCacheStore < FileStore < MemoryStore

価格面

安い <-————————————————————————————————————————> 高い

FileStore, MemoryStore < MemCacheStore, RedisStore

所感

FileStoreとMemoryStore

キャッシュデータ量が小さく、ホストも多くない小規模アプリなら、速くて安いMemoryStoreやFileStoreが良さそうだと思いました。
しかし、これら2つはスレッドやプロセス毎にキャッシュを管理する必要があるため、キャッシュの更新を上手く管理しないとバグのオンパレードになると考えられます。

そのため利用するときは以下の2つかなと思います。

  • 滅多に更新しないデータのみをキャッシュする場合に使用する
  • 開発環境だけ使用する

MemCacheStoreとRedisStore

MemCacheStoreやRedisStoreは大規模なデータ量を保持可能なのと、プロセスやホスト毎にデータを保存する訳ではないのでバグも起きにくいと考えられます。
そのため、本番環境でよく使われるのかなと思いました。
また、MemCacheStoreやRedisStoreはexpires_inオプションを使って有効期限を指定できます。

ネットワークを介すので実装する際は、そもそもキャッシュデータを取りに行くより実行したほうが速いということがないかは都度検討する必要がありそうです。

RedisStoreの利点

RedisStoreはLRUやLFUを選択できるのと、ディスクに保持できる点が優れているみたいです。
LRUとLFUは以下のアルゴリズムのことです。

  • LRU(Least Recently Used): 直近の利用が最も少ないキャッシュを削除するアルゴリズム
  • LFU(Least Frequently Used): 利用頻度が最も低いキャッシュを削除するアルゴリズム

redis4.0からLFUがサポートされています。

参考

Rails guide: Railsのキャッシュ機構
Railsアプリを66%スピードアップ ― Railsキャッシュの完全ガイド
redis document

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?