キャッシュを親子に持たせるのは危険。子が死んでも親は残り続ける。
Rails.cacheの中でRails.cacheをするのは危険。 親子関係と呼ぶが正しい表現なのか?
子が死んでも親は残り続ける。
そんな悲しい話ある? プログラミングの話でもあれば悲しい話だと思った今日この頃。
なので子と親に差分があって、 更新系のあるデータを扱う場合でもそうでない場合でもやるな。 絶対やるなという話。
コンソール上で適当にやった
def caching_test(id) Rails.cache.fetch("user-caching-#{id}", expires_in: 1.day) do lost_caching(id) end end def lost_caching(id) Rails.cache.fetch("user-child-caching-#{id}", expires_in: 60.seconds) do User.find(id) end end user = caching_test(1) => #<User id: 1, ...> Rails.cache.fetch("user-caching-1") => #<User id: 1, ...> Rails.cache.fetch("user-child-caching-1") => #<User id: 1, ...>
1分たった後に
Rails.cache.fetch("user-child-caching-1") => nil
消えた。よし!
Rails.cache.fetch("user-caching-1") => #<User id: 1, ...>
いた。悲しい。
ちなみに更新系は値が変わらないで生き続けるので要注意。
あんまりRails.cache周りのコマンドを知らない人は参考になるサイト。
僕もあれって一瞬なったので、参考にさせてもらったサイト載せさせていただきます。