Sha*_*mad 0 ruby activerecord caching ruby-on-rails
我可能在这里遗漏了一些非常简单的东西,但却无法理解.
我正在尝试缓存一个简单的活动记录查询,但每次触摸缓存时,它都会再次对DB运行查询.
控制器代码:
products = Rails.cache.read("search_results")
if products
render :text => products[0].id
else
products = Product.where('name LIKE ?", 'product_name?')
Rails.cache.write("search_results", products)
end
Run Code Online (Sandbox Code Playgroud)
我可以看到,在我的第二个调用中,我到达if块而不是其他,但是每当我尝试触摸产品(比如渲染它)时,我也会看到对DB的激活记录调用.
我错过了什么?
这条线
products = Product.where('name LIKE ?", 'product_name?')
Run Code Online (Sandbox Code Playgroud)
返回ActiveRecord::Relation,但并没有击中数据库,除非起脚方法被调用就可以了.
虽然我仍然建议使用fetch上面评论中提到的,但请尝试将行更改为:
products = Product.where('name LIKE ?", 'product_name?').all
Run Code Online (Sandbox Code Playgroud)
这将强制数据库命中,并将查询的实际结果保存到缓存中,而不是关系.
| 归档时间: |
|
| 查看次数: |
767 次 |
| 最近记录: |