如何在Rails查询中缓存数据库生成的列表?
@total_untagged = Rails.cache.fetch("tags_controller/untagged/@total_untagged", expires_in: 1.hour) do
InventoryApi::BaseEntity\
.joins(@object_type.to_sym)
.includes(:base_entities_tags)
.where({ base_entities_tags: { base_entity_id: nil }})
.size.to_int
end此代码加载InventoryApi::BaseEntity模型,并将其保存在缓存中,键值为:
tags_controller/untagged/@total_untagged缓存的结果是一个实例,它是从数据库延迟加载的,而不是像具有字段值的类那样立即加载。
一旦它被延迟加载,当缓存被读取时,它需要再次读取数据库,实际上,我没有获得任何缓存。
如何缓存最终结果,而不是数据库关系?
发布于 2016-11-24 04:55:17
一旦它被保存到缓存中,它就不需要再次读取数据库,直到缓存失效。如果你在本地使用它,这里有一些你应该记住的东西。这是来自http://guides.rubyonrails.org/caching_with_rails.html的。
要尝试本地缓存,您需要在本地环境中启用缓存,方法是在相关的配置/
/*.rb中将config.action_controller.perform_caching设置为true。
更改config.action_controller.perform_caching的值只会对操作控制器组件提供的缓存产生影响。例如,它不会影响低级缓存。
https://stackoverflow.com/questions/40772140
复制相似问题