簡體   English   中英

在兩次請求之間記住PHP中的對象狀態

[英]Remember object state in PHP between requests

我正在編寫一個應用程序,我將使用許多不同的語言來獲取一些字典值。 我知道我可以使用GetText,但是AFAIR文件必須在編輯后進行編譯,並且我想讓用戶編輯字典,並且無法在服務器上重新編譯.mo文件。 我不知道將使用多少種語言,因此解決方案必須具有彈性。

我設計了數據庫,使其運作良好,並且架構看起來不錯,但是對於每個字典值,都有幾個聯接,因此解決方案不太快。

因此,我考慮一次存儲字典值,並且僅在其中編輯值之后才刷新它。 不幸的是,無法使用PHP靜態變量,因為它們會在請求結束時死亡。 我不想使用會話,因為我必須按每個用戶進行數據庫調用。 理想情況下,我想像在Java中一樣使用靜態變量-只要應用程序存在於JVM中,它們就一直存在。

為所有用戶(不是每個用戶)長時間(不是按請求)存儲某些變量(在我的示例中為字典,詞典條目等)的最佳解決方案是什么?

我正在考慮制作類似於DictionaryValues類的內容,將其序列化一次,然后在每個請求中反序列化。 每次有人編輯字典時,對象都會再次序列化,並替換舊的序列化對象。 當然,與多久讀取一次字典值相比,編輯將很少發生。

這是一個好的解決方案嗎? 我應該序列化對象並將其存儲在磁盤上還是將其寫入數據庫? 哪一個更快?

也許您為該問題找到了更好的解決方案?

您可以嘗試使用PHP APC 它快速且易於使用。 您可以序列化/反序列化對象並輕松存儲/獲取它們。

在分布式環境中,您可以使用memcache執行相同的功能。

如果內存緩存/ APC過多或不可行,則有以下幾種選擇:

您可以經常將數據庫值“編譯”到一個PHP文件中,並包括該文件。 那將是最快的解析和處理方式。

如果您不需要每個頁面中的每個字典值(很有可能是嗎?),您可能想要使用一個無需JOIN就可以工作的緩存表。 從占用空間的角度來看,這將是最好的解決方案。

有兩種選擇:

  1. 您可以使用共享內存( shmopmemcache )。
  2. 您可以緩存到文件或數據庫-嘗試使用PEAR :: Cache_Lite (或@jldupont建議的APC

暫無
暫無

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

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