2017-02-20 48 views
0

我的網站(由PHP提供)使用一些值,這些值計算起來很昂貴(並且計算是確定性的),因此我想在第一個請求中緩存結果。然後,我可以使用這個功能:PHP中是否有服務器級別的靜態變量?

function MyValue($valueID) { 
    if (!isset($myValueCache[$valueID])) { 
    $myValueCache[$valueID] = ... // The long and expensive calculation. 
    } 
    return $myValueCache[$valueID]; 
} 

的問題是,如何申報$myValueCache以保持其腳本的不同調用之間的值?我會叫它「服務器級靜態變量」或類似的東西。一個簡單的static變量不是所需的解決方案。 http://www.elated.com/articles/php-variable-scope-all-you-need-to-know/寫道:「一旦腳本退出,一個靜態變量就會被銷燬,就像本地和全局變量一樣。」我想保留價值,直到我明確地unset它。謝謝:)

PS。 「昂貴」意味着數據庫訪問。在開發時計算和硬編碼結果是不可能的。

+1

如果用戶特定,則將其填入會話中,如果未將其保存在數據庫字段中,因爲您已有數據庫。不昂貴'SELECT value FROM cache WHERE id = $ valueID' – AbraCadaver

+0

好吧,經過漫長的沉默,我想最終的答案是:「在PHP中沒有這樣的變量聲明。」 (但我不確定,這就是我問這個問題的原因。)感謝您推薦的解決方法。帶有@ AbraCadaver解釋的內存數據庫可能是一個解決方案。 –

回答

2

您應該考慮使用任何內存數據庫,如Redis或Memcached。您也可以嘗試緩存文件中的值,但這會比內存數據庫慢。

+0

謝謝,但DBMS不是我的選擇,而且這種解決方法並不是真正的問題答案。我們無法將完整的數據庫移到內存中,只是爲了解決這個問題。 –

+1

您將該變量存儲在內存緩存中而不是數據庫中。 – AbraCadaver

+0

相信我,爲了緩存目的,您找不到比內存中更好的存儲。它只被稱爲數據庫,因爲它看起來很相似,但實際上它與經典DBMS無關。 –