一次加载大数组,并在任何地方使用已加载的


Load the big array in one time and use the loaded in everywhere

我正在编写简单的搜索引擎(使用向量模型(,我有一个带索引的大文本文件。在我的应用程序中,我必须加载文件并将其转换为数组

此时,我在每个页面中创建新的类实例,它将这个文件加载到数组中。

我可以只加载这个数组一次(一开始(,然后使用加载的数组吗?我想它是写在RAM中的?

简短回答;对

有几个选项可以使用。PHP有一个名为APC 的库

你可以这样做。。。

apc_store和apc_fetch

<?php
$bar = 'BAR';
// store variable $bar in memory for 1 hour with key 'foo'
apc_store('foo', $bar, 3600);
var_dump(apc_fetch('foo'));
?>

下面是一个适当的用例示例:

这会自动处理过期的缓存并重新加载缓存

<?php
// Config?
define('CACHE_LIFESPAN', 3600); // 1 Hour
// Helper Function
function loadXYZData() {
    $result = @apc_fetch(__FUNCTION__);
    if (!$result) {
        $result = array('a' => 'b', 'c' => 'd'); // dummy data
        @apc_store(__FUNCTION__, $result, CACHE_LIFESPAN);
    }
    return $result;
}
// Usage - through out all your scripts
$myXYZData = loadXYZData();
var_dump($myXYZData);
?>

在这里,APC缓存使用函数名称作为缓存密钥。因此,您将在应用程序中为每个可缓存数据创建一个类似于上面的函数。

以上脚本的输出为:

array (size=2)
  'a' => string 'b' (length=1)
  'c' => string 'd' (length=1)

除了APC,还有第三方键值对存储引擎(内存中(,如Memcached:http://www.php.net/manual/en/book.memcached.php

如果你环顾四周,还有其他人。