如果您將Yii設置爲在配置文件的數據庫設置中記錄數據庫查詢('enableParamLogging' => true
),您可以看到Yii經常查詢數據庫中的ActiveRecord查詢。例如:假設您有一個名爲User
的模型,並且您告訴Yii通過主鍵爲您提供用戶,Yii將查詢數據庫三次(!)次。它將執行show columns
查詢,然後執行show create table
查詢,最後它將查詢數據庫中的實際數據。前兩個查詢是Yii知道您的user
表的模式。如果從應用程序服務器到數據庫服務器的往返時間是100ms(如果真的很慢,那麼應該對此做點什麼),那麼獲得該架構的這兩個查詢將爲您的應用程序響應時間增加至少200ms。它會爲填充您的User
模型的每個請求執行此操作。根據應用程序的編寫方式,它甚至可能會在單個請求中多次執行此操作。如果你告訴Yii使用模式緩存,Yii會檢查緩存,看看它是否已經知道你的user
表的模式,如果有,它將使用它而不是點擊數據庫。檢查緩存時仍然存在延遲,但希望它小於或等於數據庫服務器的延遲。假設您使用Redis服務器進行緩存,並且延遲時間爲100毫秒(也很可笑)。緩存模式仍然會比查詢數據庫更快,因爲Yii只需要一次查詢緩存來檢索模式,而不需要兩次訪問數據庫。
所以在這個例子從查詢的模式的高延遲數據庫查詢等待時間高速緩存服務器仍然會節省您的時間切換。在實踐中,你的緩存應該比你的數據庫低得多的延遲,因此可以節省更多的時間,如果你的應用程序非常複雜,Yii會在每個請求中從多個表中加載模式,因此模式緩存可以在請求響應中產生巨大的差異時間。
你能澄清的第一個問題? – topher
@topher我的意思是爲什麼我們應該使用這種緩存。第一個問題涉及第二和第三。 –