2017-02-20 32 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无关。 –