2010-07-01 50 views
1

我有一個執行以下操作的頁面:使用會話,以降低CPU負荷

  1. 執行一個數據庫查詢(更準確地說,從用戶U,user_tag UT其中u選擇u.user_uid,ut.user_metatada .uid = ut.uid,一個用戶可以具有一個或多個metadatas)
  2. 生成基於所述查詢
  3. 的結果數據的陣列上執行這些陣列(更多關於此操作在這篇文章中讀取一些複雜的操作。 )。以數組形式返回最終結果。該數組是包含user_uids的一維數組。
  4. 執行另一個查詢並獲取user_uid的所有元素的user_fullname,user_photo
  5. 在頁面中打印查詢結果。

當用戶重新加載頁面時,這5個操作將從頭開始執行。爲了避免每次用戶重新加載頁面時執行所有這5個操作,我們可以在會話中保存最終結果(操作編號5)。所以我們可以說以下內容:

If session is not set 
Perform those 5 operations 
else 
Print session values 

這會降低CPU負載,但它會採取一些(我不知道有多少)內存而不是將信息保存在一個會議。但有人認爲加載CPU而不是內存會更好。 問題:你推薦我做什麼?是否使用會話(在我的情況下)?還有其他更好的解決方案嗎?

回答

3

使用APCMemcached。他們在內存鍵值緩存中爲正是爲此設計的。 如果需要,您可以在其中存儲陣列,並且將失效時間設置到期時間Facebook uses them減輕負荷,所以他們不能壞... :)

0

你的情況:你有什麼需要更多的CPU或內存?

如果這5個操作的結果不經常更改,通過各種手段,緩存結果(無論是在會議或磁盤上)。

1

您也可以使用類似memcached

而如果它是更好試圖降低CPU負載,或記憶,這要看情況。

嘗試觀察你的CPU和內存消耗,這是打它首先是限制,即一個是你應該儘量減少。

0

您也可以將結果存儲在新的DB-Table中。 或在一個會話中。

使用的內存,將取決於有多少用戶訪問您的網站。每個用戶將在session_save_path目錄中生成一個新條目(這是存儲會話信息的地方)。

還要注意,一段時間後,PHP會從這個目錄中刪除舊的條目,這意味着該值將有下一次用戶訪問你的頁面進行再生。但是這也意味着,內存空間被保存了。