Ruby on rails 在rails中查询缓存仍然会对DB运行调用
我可能遗漏了一些非常简单的东西,但我不明白是什么 我试图缓存一个简单的活动记录查询,但每次我触摸缓存时,它都会再次对数据库运行查询 控制器代码:Ruby on rails 在rails中查询缓存仍然会对DB运行调用,ruby-on-rails,ruby,caching,activerecord,Ruby On Rails,Ruby,Caching,Activerecord,我可能遗漏了一些非常简单的东西,但我不明白是什么 我试图缓存一个简单的活动记录查询,但每次我触摸缓存时,它都会再次对数据库运行查询 控制器代码: products=Rails.cache.read(“搜索结果”) if产品 呈现:text=>products[0]。id 其他的 产品=产品。其中('name LIKE?,'Product_name?')) Rails.cache.write(“搜索结果”,产品) 结束 我可以看到,在第二次调用中,我访问的是if块,而不是else块,但每当我尝试
products=Rails.cache.read(“搜索结果”)
if产品
呈现:text=>products[0]。id
其他的
产品=产品。其中('name LIKE?,'Product_name?'))
Rails.cache.write(“搜索结果”,产品)
结束
我可以看到,在第二次调用中,我访问的是if块,而不是else块,但每当我尝试触摸产品(如渲染产品)时,我也会看到对DB的活动记录调用
我错过了什么?这一行
products = Product.where('name LIKE ?", 'product_name?')
返回,但除非对其调用kicker方法,否则不会命中数据库
虽然我仍然建议使用我在上面的评论中提到的fetch
,但请尝试将行更改为:
products = Product.where('name LIKE ?", 'product_name?').all
这将强制数据库命中,并将查询的实际结果保存到缓存中,而不是关系
products = Product.where('name LIKE ?", 'product_name?')
返回,但除非对其调用kicker方法,否则不会命中数据库
虽然我仍然建议使用我在上面的评论中提到的fetch
,但请尝试将行更改为:
products = Product.where('name LIKE ?", 'product_name?').all
这将强制数据库命中,并将查询的实际结果保存到缓存中,而不是关系。
不是答案,而是考虑使用,而不是自己做读写。不是答案,而是考虑使用,而不是自己做读写。