14
12

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 5 years have passed since last update.

Rails で複数の CacheStore を同時に扱う方法

Last updated at Posted at 2014-08-27

Rails で目的別に CacheStore を使い分けたい場合どうするか。

想定する状況

例えば、普段は MemCacheStore を CacheStore として使っているけど、一部のキャッシュはもっと高速にしたいので MemoryStore を使いたい場合。

具体的に起こった事例でいうと、MemCacheStore にキャッシュしていたが、計測してみると memcached とのネットワーク転送に若干時間がかかっていた。ネットワークコストをなくすため、そこだけ MemoryStore したい。幸い MemoryStore のデメリットも、そこだけに限れば問題にならなそう。というケース。

使いたい CacheStore を個別に作ればよい

上のケースだと、ActiveSupport::Cache::MemoryStore を使いたいので、config/initializers/ 下に適当な ruby ファイルを作って MemoryStore を生成してやる。

config/initializers/hoge_memory_store.rb
::HOGE_MEMORY_STORE = ActiveSupport::Cache.lookup_store(:memory_store)

Rails の中で ActiveSupport::Cache.lookup_store 経由で CacheStore を作っていたので真似しているが、直接 ActiveSupport::Cache::MemoryStore.new でもよい。

使う側では普段使っている Rails.cache の代わりに上記で生成した CacheStore を使ってやればよい。

::HOGE_MEMORY_STORE.write('hoge', 'nya-')

まとめ

  • 使いたい CacheStore を自分で生成して、使い分ければよい
  • というのをこれから実践する(実践したので後述)
  • 記事とは関係ないですが、キャッシュの利用は計画的に

追記

上の具体例に対して実践したところ、そこまで大きな効果はなかった。
というのも実際の production 環境ではネットワーク速度も早いため。
もう少ししっかり計測してから取り組む価値があるか判断した方がよかったです。
とは言えメモリストアは最速なので、速いは速いですよ。
ということで、キャッシュの利用は計画的に。。。自戒の意味を込めて書いたのに早速ブーメランとは。。。

参考リンク

ActiveSupport::Cache

14
12
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
14
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?