2012-07-30 36 views
0

我可能在這裏丟失了一些非常簡單的東西,但不明白是什麼。在rails中查詢緩存仍然對數據庫運行調用

我試圖緩存一個簡單的活動記錄查詢,但每次觸摸緩存時,都會再次對數據庫運行查詢。

控制器代碼:

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 

我可以看到,在我的第二個電話,我得到的,如果塊,而不是其他人,而是任何我想要去觸摸產品(如渲染它)時我也查看對數據庫的有效記錄調用。

我錯過了什麼?

+0

不是答案,但考慮使用['fetch'](http://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html#method-i-fetch)而不是自己讀寫。 – x1a4 2012-07-30 02:30:52

回答

5

products = Product.where('name LIKE ?", 'product_name?') 

返回ActiveRecord::Relation,但並沒有數據庫,除非起腳方法被調用就可以了。

雖然我還是會建議使用fetch如上面我的評論中提到,嘗試改變行:

這將迫使數據庫命中,而查詢的實際結果保存到緩存中,而不是關係。

相關問題