簡體   English   中英

在PHP中緩存以加快速度

[英]Caching in PHP for speeding up

我正在VPS上運行應用程序(在PHP和MySql上構建)。 我有文章表,其中有數百萬條記錄。 每當用戶登錄時,我將顯示每個部分的最后50條記錄。

因此,每次使用登錄或刷新頁面時,它都會執行sql查詢以獲取這些記錄。 現在,由於我的頁面速度已大大降低,因此網站上有很多用戶。

我對緩存進行了一些研究,發現我可以根據部分(不)讀取mysql數據。 物品,例如(第-1節和第-50條)。 將其存儲在磁盤文件緩存/ md5(節號)中。

然后在將來我收到該部分的請求時,只需從緩存/ md5(第no節)中獲取數據即可。

上述解決方案看起來很棒。 但是,在我繼續之前,我真的很想澄清專家們的以下幾點懷疑。

  • 它會真的加速我的應用程序嗎(我知道磁盤io比mysql查詢快,但是不知道多少。)
  • 我目前在我的頁面上使用分頁,例如顯示前5篇文章,並且當用戶單擊“顯示更多”然后顯示下5篇文章時...等等,這很容易在mysql查詢中使用。 我不知道如果將所有記錄(50)存儲在緩存文件中該怎么辦。 如果有人可以分享一些信息,那就太好了。
  • 如果您認為上述方法無效,則任何其他解決方案都將無效。
  • 您知道的任何開源應用程序。 (PHP)

先感謝您

問候,拉吉

我遇到了同樣的問題,即每個頁面加載都會導致2個以上的查詢正在運行。 幸運的是,它們是非常相似的查詢,它們一遍又一遍地運行,因此緩存(如您的情況)非常有幫助。

您有兩種選擇:

  1. 將數據庫卸載到同一網絡上的單獨VPS,以根據需要進行擴展和縮減

  2. 緩存每個查詢中的數據,並在訪問數據庫之前嘗試從緩存中檢索

最后,我們選擇了兩者,都安裝了Memecached及其php擴展名以實現查詢緩存。 Memecached是一個鍵值存儲(非常類似於PHP的關聯數組),其設置的到期時間以秒為單位,用於存儲的每個值。 由於它將所有內容存儲在RAM中,因此易失性緩存數據的權衡是極快的讀/寫時間,比文件系統要好得多。

我們的實現基本上是通過過濾器運行每個查詢。 如果是select語句,請通過將memecached鍵設置為“ namespace_ [查詢的md5]”並將其值設置為包含所有結果行的數組的序列化版本來對其進行緩存。 緩存120秒(3分鍾)應該足以幫助服務器負載。

如果Memecached並非可行的解決方案,則將每個部分的所有50篇文章存儲為RSS源。 您可以一次提取所有文章,根據網站設計,使用SimpleXML抓取每篇文章的內容,並將其包裝在您網站的文章模板HTML中。 一旦數據存在,請使用CSS樣式僅顯示X篇文章,並使用JavaScript進行分頁。

由於兩個進程同時修改同一個文件不是一個好主意,因此將新故事添加到部分中會觸發一個事件,該事件會將故事添加到消息隊列中。 該消息隊列將由工作人員處理,該工作人員還使用SimpleXML執行兩個連續的操作:

  1. 刪除XML文件末尾的最舊的故事

  2. 將消息隊列中給出的新故事添加到XML文件的頂部

如果您願意,根據部分的RSS提要可以是面向公眾的功能。

暫無
暫無

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

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