tips chips

日々の作業で出てきた技術メモの切れ端を置いておくページ

ActiveRecordのキャッシュを無効化する

毎回DBから値が取りたい時やメモリ使用量を削減したい時など。

ActiveRecordはクエリの結果をキャッシュしている。

キャッシュを効かせず毎回DBから値を取りたい場合や、キャッシュが不要なシチュエーションで少しでもメモリの使用量を抑えたい場合には、このキャッシュを無効にすることができる。(自分の場合は大量のレコードを扱う処理でOOMが発生したためこの方法を使った)

例えばUserというモデルがあり、それのキャッシュを無効にしたい場合は

Uesr.uncached do User.find_by(...) # 何かしらの処理 end

というようにする。

ActiveRecord::Base.uncached do User.find_by(...) # 何かしらの処理 end

というようにしても良いとのこと。

参考: https://zenn.dev/ledsun/books/700ccad6ad861d