每次我打的認證頁面,我注意到制定發出SQL語句:Rails設計:我如何(mem)緩存用戶對象的數據庫請求?
用戶負載(0.2ms的)選擇users
* FROM users
其中限制1
(I(users
id
= 1)。 '使用Rails 3 btw ..所以cache_money似乎是一個解決方案,儘管很多搜索我沒有找到替代品)。
我在用戶模型中嘗試了許多覆蓋,只有find_by_sql似乎被調用。哪個獲得了整個SQL語句的字符串。像find_by_id或find這樣的直覺似乎並沒有被調用。我'可以'重寫此方法並收集用戶標識並從中執行合理的緩存系統 - 但這非常難看。
我也嘗試覆蓋authenticate_user,我可以攔截一個SQL嘗試,但然後調用current_user似乎再次嘗試。
簡而言之,我的用戶對象很少發生變化,而且爲了繼續使用db而不是memcache解決方案,我的用戶對象發生了變化。 (假設我願意接受使無效所有緩存的所有責任:after_save作爲該解決方案的一部分,但不是全部)
設計做了很多檢查。檢查你*想要*做(通常)。但是你是對的,其中一些應該是可緩存的。你是否啓動了Ruby-Debug來找出不同的發現來自哪裏?我沒有在源代碼中看到find_by_sql。 常見的情況是正在訪問由Devise和Devise保護的頁面的登錄用戶確保用戶真正有效。如果你可以緩存這個往返行程,你應該解決很多問題。 更困難:有許多方法設計本身可以使緩存無效。例如,如果用戶重置密碼。 – 2011-04-25 19:54:53