如何使用PHP将数据存储在RAM内存中?

时间:2010-11-03 16:41:13

标签: php memcached shared-memory

有没有办法使用PHP将小数据存储在RAM内存中,这样我就可以访问不同会话之间的数据而不是重新生成它。类似于memcached的东西(我无法访问memcahced)。我目前的解决方案只是将数据保存在文件中。

4 个答案:

答案 0 :(得分:12)

APC

它与memcached不同;在memcached中,您可以访问各种语言(c,python等)的数据,而APC仅适用于PHP。

编辑您确定APC安装正确吗? 你在php.ini中添加了extension=apc.so吗?并重新启动apache(我假设你在使用apache2的灯服务器上)?您phpinfo();对APC有什么看法?

这是一个完全适合我的简单测试:

<?php
/*
 * page.php
 * Store the variable for 30 seconds,
 * see http://it.php.net/manual/en/function.apc-add.php
 * */
if(apc_add('foo', 'bar', 30)){
    header('Location: page2.php');
}else{
    die("Cant add foo to apc!");
}

<?php
/*
 * page2.php
 * */
echo 'foo is been set as: ' . apc_fetch('foo');

p.s:我更喜欢使用apc_add而不是apc_store,但它们之间的唯一区别是apc_add不会覆盖变量,但如果使用相同的密钥调用两次则会失败:

  

使用此名称存储变量。密钥是缓存唯一的,因此尝试使用apc_add()来存储具有已存在密钥的数据将不会覆盖现有数据,而是返回FALSE。 (这是apc_add()和apc_store()之间的唯一区别。)

这是脚本的品味/任务问题,但上面的示例也适用于apc_store。

答案 1 :(得分:5)

您始终可以使用内存中的数据库来保存数据。但可能有点矫枉过正。

答案 2 :(得分:4)

我假设您在某种共享服务器上。

memcached或其他缓存解决方案确实是实现此目的的唯一方法。

Sessions是跨PHP页面持久保存数据的最重要方法,它基于文件工作。您可以将会话处理程序更改为基于数据库,但这也不是基于RAM的。

据我所知,无需在根级别更改系统(例如,安装memcached或将会话文件存储在RAM磁盘上),这是不可能的。

答案 3 :(得分:3)

/dev/shm中创建一个文件,它将保留在内存中,直到机器重新启动。这可能会或可能不会比使用任何旧文件更快,具体取决于您的使用模式。