2011-05-30 24 views
7

我使用Symfony的2生成從一個MySQL數據庫中的數據我的網頁。對於大多數內容,用戶必須經過身份驗證,但內容本身不會經常更改,也不需要爲用戶定製。那麼在保持auth檢查的同時避免數據庫調用的緩存策略是什麼?生成內容積極的緩存,同時保持權威性信息

+0

TFM似乎有一些體面的信息 - http://symfony.com/doc/current/book/http_cache.html - 在我看來,應用程序緩存擁有所有你需要的東西,可能只需要檢查該請求是否被認證,或在緩存響應之前添加到非公共資源。 – smcphill 2011-06-23 17:29:44

+2

這不會解決他的問題。他正在尋求緩存MySQL的查詢,而不是HTTP請求。 – 2011-07-07 05:23:42

回答

0

我用Zend_Cache內解決了這個用於存儲渲染模板結果的可緩存操作。然後我創建緩存內容的新Response對象。如果緩存爲空,則生成內容。

我想創建一個插件來檢查註釋並自動存儲Response輸出,但事實證明,我只有3-4個可緩存的顯示操作,並且具有非常複雜的緩存ID創建規則,所以我把將邏輯直接緩存到控制器代碼中。

1

簡單地說,使用的Memcache緩存SQL結果集的時間延長。

-1

看來,你有很多的選擇,以適應交響樂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 

只要確保你的最大年齡是足夠小,當有新的變化(比如說代碼更新),用戶不會停留與舊的一頁,因爲沒有辦法強迫他們再次請求頁面缺少更改網址。

+0

這是Symfony的1。 – chiborg 2011-12-08 14:40:58

0

這也許是過於巨大的變化,但下面的方案可能的情況下是有用的:

創建多套頁,一個用於還未authed用戶(讓我們把在站點根)和別人認證用戶應該看到相同的內容(比如,它的兩個或更多的應該看到相同的內容,他們進行身份驗證時,那麼我們會爲所有的人都只有一組),並把它放進目錄在根下。然後爲每個這樣的「for-authed-only」目錄形成簡單的.htaccess/.htpasswd文件,然後它將成爲web服務器的問題,而不是你的腳本。

希望你有想法。說起來很模糊,但很容易實現。

示例:假設您只關心允許經過身份驗證的用戶在網站上查看網頁「/topsecret.html」。創建dir(/ authed),在它上面建立HTTP-auth,並把你的topsecret.html放到dir中(所以它會是'/authed/topsecret.html')。現在編輯'/topsecret.html',然後簡單地將它的主要內容替換爲'/authed/topsecret.html'的'對不起,請驗證自己'鏈接。

0

如果您使用Symfony2,如果您使用Doctrine2,則使用Doctrine2 ,默認情況下應啓用緩存。

選擇您的緩存驅動程序的目的,應該是沒有問題的。 您可能還對query result caching有特別感興趣。

沒有元數據和查詢緩存不要使用原則!原則是 高度優化與緩存工作。 Doctrine 中爲高速緩存而優化的主要部分是元數據映射信息 ,包含元數據高速緩存以及DQL到SQL轉換以及查詢 緩存。這兩個緩存需要的內存只有在絕對最低還 他們主要提高主義的運行時性能。與學說使用 推薦的高速緩存驅動器是APC。 APC爲您提供 有操作碼緩存(這是強烈推薦反正)和一個非常 快速內存緩存存儲,您可以使用元數據和 查詢緩存