我使用Symfony的2生成從一個MySQL數據庫中的數據我的網頁。對於大多數內容,用戶必須經過身份驗證,但內容本身不會經常更改,也不需要爲用戶定製。那麼在保持auth檢查的同時避免數據庫調用的緩存策略是什麼?生成內容積極的緩存,同時保持權威性信息
回答
我用Zend_Cache內解決了這個用於存儲渲染模板結果的可緩存操作。然後我創建緩存內容的新Response
對象。如果緩存爲空,則生成內容。
我想創建一個插件來檢查註釋並自動存儲Response輸出,但事實證明,我只有3-4個可緩存的顯示操作,並且具有非常複雜的緩存ID創建規則,所以我把將邏輯直接緩存到控制器代碼中。
簡單地說,使用的Memcache緩存SQL結果集的時間延長。
看來,你有很多的選擇,以適應交響樂http://www.symfony-project.org/book/1_2/12-Caching緩存(不是爲2,但我的猜測是不是有了很大的改變)。
你可以把你沉重的SQL語句在其自己的腳本,並打開緩存上該腳本
list:
enabled: on
with_layout: false # Default value
lifetime: 86400 # Default value
而且,如果你確認生成的標籤不會爲你可以使用symfony的一個,而改變告訴用戶的瀏覽器甚至不會打擾您的服務器的內容,這會導致頁面幾乎立即爲用戶加載。
$this->getResponse()->addCacheControlHttpHeader('max_age=1200'); // in seconds - less than 1 year seconds
只要確保你的最大年齡是足夠小,當有新的變化(比如說代碼更新),用戶不會停留與舊的一頁,因爲沒有辦法強迫他們再次請求頁面缺少更改網址。
這是Symfony的1。 – chiborg 2011-12-08 14:40:58
這也許是過於巨大的變化,但下面的方案可能的情況下是有用的:
創建多套頁,一個用於還未authed用戶(讓我們把在站點根)和別人認證用戶應該看到相同的內容(比如,它的兩個或更多的應該看到相同的內容,他們進行身份驗證時,那麼我們會爲所有的人都只有一組),並把它放進目錄在根下。然後爲每個這樣的「for-authed-only」目錄形成簡單的.htaccess/.htpasswd文件,然後它將成爲web服務器的問題,而不是你的腳本。
希望你有想法。說起來很模糊,但很容易實現。
示例:假設您只關心允許經過身份驗證的用戶在網站上查看網頁「/topsecret.html」。創建dir(/ authed),在它上面建立HTTP-auth,並把你的topsecret.html放到dir中(所以它會是'/authed/topsecret.html')。現在編輯'/topsecret.html',然後簡單地將它的主要內容替換爲'/authed/topsecret.html'的'對不起,請驗證自己'鏈接。
如果您使用Symfony2,如果您使用Doctrine2,則使用Doctrine2 ,默認情況下應啓用緩存。
選擇您的緩存驅動程序的目的,應該是沒有問題的。 您可能還對query result caching有特別感興趣。
沒有元數據和查詢緩存不要使用原則!原則是 高度優化與緩存工作。 Doctrine 中爲高速緩存而優化的主要部分是元數據映射信息 ,包含元數據高速緩存以及DQL到SQL轉換以及查詢 緩存。這兩個緩存需要的內存只有在絕對最低還 他們主要提高主義的運行時性能。與學說使用 推薦的高速緩存驅動器是APC。 APC爲您提供 有操作碼緩存(這是強烈推薦反正)和一個非常 快速內存緩存存儲,您可以使用元數據和 查詢緩存
- 1. Ie8積極緩存
- 2. 修復Flash的積極的緩存
- 3. React-Native提取API積極緩存
- 4. 超時緩存信息
- 5. 保持信息
- 6. 保持購買內容,同時更新
- 7. 針對REST資源極其積極的HTTP緩存建議
- 8. 當我切換內容視圖時,信息不會保存
- 9. 保持與軟刪除的邏輯一致性,同時保留原始信息
- 10. 關閉後更改並保存信息窗口內的內容
- 11. 生成不同的內容
- 12. 緩存抽象類的屬性信息
- 13. 保持用戶信息跨應用程序緩存
- 14. Aptana仍然積極支持?
- 15. 保存網站內容和存取權
- 16. 在DB或pref中保存信息的性能/內存消耗
- 17. PendingIntents保持緩存相同的對象
- 18. 保持信息MYSQL
- 19. Django的休息權威性與Allauth
- 20. TCPDF保持在一起的功能,以保持內容在1頁(PDF生成)
- 21. 將temparay信息保存在內存中
- 22. 山魈不同的信息內容
- 23. 如何動態生成iFrame內容的信息庫?
- 24. Android的Facebook內容提供商權威
- 25. CakePHP的權威性會議再生
- 26. PhantomJS保持緩存
- 27. 內存緩存哈希生成
- 28. 緩存內容
- 29. 讓服務代理對檢測毒信息的積極性更低?
- 30. 存儲保存的信息
TFM似乎有一些體面的信息 - http://symfony.com/doc/current/book/http_cache.html - 在我看來,應用程序緩存擁有所有你需要的東西,可能只需要檢查該請求是否被認證,或在緩存響應之前添加到非公共資源。 – smcphill 2011-06-23 17:29:44
這不會解決他的問題。他正在尋求緩存MySQL的查詢,而不是HTTP請求。 – 2011-07-07 05:23:42