2010-11-03 51 views
9

有沒有辦法使用PHP將小數據存儲在RAM內存中,以便我可以訪問不同會話之間的數據而不是重新生成它。類似於memcached的東西(我沒有訪問memcahced)。我目前的解決方案只是將數據保存在文件中。如何使用PHP將數據存儲在RAM內存中?

+0

[PHP的服務器端變量,將永遠「活着」的可能重複](http://stackoverflow.com/questions/4086044/php-server-side-variables-that-will-live-for-永遠) - 那裏有很多答案適用於你的問題。 – Gordon 2010-11-03 16:57:36

+0

爲什麼?在任何現代操作系統上(存儲不在共享文件系統上),文件數據都會緩存在內存中。 – symcbean 2010-11-03 17:04:00

+0

編輯我的答案。 – Strae 2010-11-03 20:20:55

回答

4

我假設你在某種共享服務器上。

memcached或其他緩存解決方案確實是這樣做的唯一方法。

會話是跨PHP頁面保持數據最重要的方法,它基於文件工作。您可以將會話處理程序更改爲基於數據庫,但這不是基於RAM的。

據我所見,無需在根級上更改系統(例如安裝memcached或將會話文件存儲在RAM磁盤上),這是不可能的。

5

您可以隨時使用內存數據庫來保存數據。雖然可能過度殺傷。

+1

我很驚訝沒有人提高你的答案。我已經成功使用mysql內存表,它們非常快。RDB可能會影響會話,但當您無法訪問memcached或/ dev/ – 2015-03-08 19:52:45

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'); 

PS:我更喜歡使用apc_add超過apc_store,但它們之間的唯一區別是,apc_add犯規覆蓋變量,但如果調用將失敗兩次使用相同的密鑰:

使用此名稱存儲變量。鍵是緩存唯一的,因此試圖使用apc_add()以已存在的鍵存儲數據不會覆蓋現有數據,而是返回FALSE。 (這是apc_add()和apc_store()之間的唯一區別。)

這是腳本的味道/任務的問題,但上面的例子與apc_store工作過。

+0

時,這是一個很好的選擇,他無法安裝memcached,因此他很可能無法安裝APC – 2010-11-03 16:46:09

+0

確實如此,但許多主機都允許使用APC(有一些限制) - 我們需要問他。 – Strae 2010-11-03 16:48:16

3

/dev/shm中創建一個文件,並將其保存在內存中,直到機器重新啓動。這可能會或可能不會比使用任何舊文件更快,具體取決於您的使用模式。

+0

他似乎在共享服務器 – 2010-11-03 16:46:53

+2

@Pekka那麼,他被擰了...讓我們只希望他的文件獲取操作系統緩存。 – kijin 2010-11-03 16:54:33