簡體   English   中英

將MySQL集結果存儲在PHP會話數組中以減少數據庫查找

[英]Store MySQL set result in PHP session array to lessen database lookups

將數據庫結果集存儲在用戶會話中是否合理/負責任的想法,而不是在每次頁面加載時從數據庫中重新加載數據庫結果集? 我知道在服務器上的緩存文件中緩存生成的HTML代碼的可用性,但我認為這有太多的便利問題。

例如,在購物頁面上,主導航中的品牌標簽有一個下拉菜單,其中列出了當前在網站上有產品的所有品牌。 查詢已經過優化,但仍然需要在每次加載頁面時運行。 而不是這樣做我想將結果集保存在用戶的會話中,因此每個會話只加載一次品牌。

或者,我可以為subnav生成HTML代碼並將其存儲在服務器上的緩存文件中。 如果在會話中存儲陣列的想法不利於服務器的性能,我可能會看到過去的便利問題。

感謝您的幫助!

有沒有什么理由你不能使用像Memcached這樣的傳統緩存而不是試圖將它塞進會話?

以這種方式使用會話緩存的問題是它會造成混亂。 會話數據應盡可能保持精簡,因為它會在每個請求中加載。 傾倒大量數據可能會嚴重拖累性能。

在會話中存儲東西似乎總是“方便”,但除非它與會話本身嚴格相關,否則最好避免。

是的,這是合理的,並建議緩存不經常更改的數據。 最快的SQL查詢是您根本不運行的查詢。

一個棘手的問題是決定何時刷新緩存的數據版本。 關於這個有一句名言:

“計算機科學只有兩個難題:緩存失效和命名事物。”
- 菲爾卡爾頓

至於使用會話,我同意@ tadman的回答,會話不一定是這類數據的最佳位置。 還有其他選項,包括您提到的緩存文件,以及內存緩存,如memcachedAPC

在這種情況下,我建議去找Memcached

在此輸入圖像描述

有關設置和配置的說明,請訪問: https//www.digitalocean.com/community/articles/how-to-install-and-use-memcache-on-ubuntu-12-04 (請注意,這是針對Ubuntu但它會給你一個好主意)

其他人建議使用Memcached。 它增加了復雜性並需要RAM(因此如果它們在同一台服務器上運行,它會使MySQL變得更慢)。 它可能是最適合您的解決方案,但由於我不知道任何“對每個人都有好處”的解決方案,並且由於我不知道您的工作量,我只是建議替代方案。

是的,MySQL查詢緩存有很多問題。 但它可能對你有好處。

如果沒有太多東西要緩存,MEMORY表也可能是一個很好的解決方案。

在會話數據中存儲緩存可能比根本不緩存更糟糕,因為每個用戶的數據都是重復的,並且僅在會話到期時才進行清理。 不要那樣浪費你的記憶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM