2017-02-20 9 views
0

私のウェブサイト(PHP提供)は計算に費用がかかり、計算が確定的ないくつかの値を使用しているため、最初のリクエストで結果をキャッシュしたいと思います。質問は、どのようにスクリプトの異なる呼び出しの間その値を維持するために$myValueCacheを宣言することですPHPにはサーバレベルの静的変数がありますか?

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

:それから私は、この機能を使用することができますか?私はそれを"サーバレベルの静的変数"などと呼んでいます。単純な変数staticは望ましい解決策ではありません。 http://www.elated.com/articles/php-variable-scope-all-you-need-to-know/は次のように書いています。「スクリプトが終了すると、静的変数はローカル変数やグローバル変数のように破棄されます。明示的にunsetまで値を保持したいと思います。ありがとう:)

PS。 「高価」とは、たとえばデータベースへのアクセスを意味します。結果の計算とハードコーディングは開発時には不可能です。

+1

ユーザがセッションに詰め込んだら、すでにDBを持っているのでDBフィールドに保存しないと、キャッシュからのSELECT値WHERE id = $ valueID' – AbraCadaver

+0

長い沈黙の後、最終的な答えは「PHPにそのような変数宣言はありません」と思います。 (しかし、私は確信していない、それは私がそれを求めている理由です)推奨された回避策をありがとう。 @ AbraCadaverの説明を含むメモリ内のデータベースは解決策かもしれません。 –

答えて

2

RedisまたはMemcachedのようなメモリ内データベースの使用を検討する必要があります。ファイル内の値をキャッシュすることもできますが、メモリー内のデータベースよりも遅くなります。

+0

ありがとうございますが、DBMSは私の選択ではありません。この回避策は本当にその質問に対する答えではありません。この問題のためだけに、完全なデータベースをメモリに移動することはできません。 –

+1

その変数は、データベースではなくメモリキャッシュに格納します。 – AbraCadaver

+0

キャッシングの目的で、メモリ内の記憶域より優れたものを見つけることはできません。それは類似しているので、データベースと呼ばれるだけですが、実際には古典的なDBMSとは関係ありません。 –

関連する問題