所以我有一個從磁盤gnugpg讀取文件的對象,它總是在主目錄中創建一個gnugpg鑰匙圈。有沒有辦法在內存中保留一個php對象,以避免磁盤讀取和wirtes?
我想避免每次從apache調用php腳本時都必須加載此對象。
是否有一個PHP對象留在內存中?
所以我有一個從磁盤gnugpg讀取文件的對象,它總是在主目錄中創建一個gnugpg鑰匙圈。有沒有辦法在內存中保留一個php對象,以避免磁盤讀取和wirtes?
我想避免每次從apache調用php腳本時都必須加載此對象。
是否有一個PHP對象留在內存中?
如果它是一個小的物體,不佔用太多的內存和可序列化,你可以只把它存儲在會話:
function getSessionObject($objectName, $params){
$sessionObjectSerialized = getSessionVariable($objectName, FALSE);
if($sessionObjectSerialized == FALSE){
$sessionObjectSerialized = constructSessionObject($objectName, $params);
setSessionVariable($objectName, $sessionObjectSerialized);
}
$sessionObject = unserialize($sessionObjectSerialized);
return $sessionObject;
}
function constructSessionObject($objectName, $params = array()){
switch($objectName){
case('gnugpg_key_ring'):{
$gnugpgKeyRing = getGNUPGKeyRing(); //do whatever you need to do to make the keyring.
return serialize($countryScheme);
}
default:{
throw new UnsupportedOperationException("Unknown object name objectName, cannot retrieve from session.");
break;
}
}
}
//Call this before anything else
function initSession(){
session_name('projectName');
session_start();
}
function setSessionVariable($name, $value){
$_SESSION['projectName'][$name] = $value;
}
function getSessionVariable($name, $default = FALSE){
if(isset($_SESSION['projectName'])){
if(isset($_SESSION['projectName'][$name])){
$value = $_SESSION['projectName'][$name];
}
}
return $default;
}
,然後檢索該對象通過調用
getSessionObject('gnugpg_key_ring');
然而並非所有對象都是可序列化的,例如如果對象擁有打開文件的文件句柄,那麼在對象序列化時需要一些額外的代碼來關閉文件,然後在對象被反序列化時重新打開文件。
如果對象很大,那麼使用適當的緩存工具(如memcached)來存儲序列化對象而不是會話會更好。
感謝你的輸入我會看看所有這些。 – MrNemus 2012-02-02 16:48:39
'apc',''memcache','memcached','shmop',只要它是可序列化的。 – Wrikken 2012-02-01 23:24:48
@Wrikken你可能想要添加xcache,任何操作碼緩存都是很好的候選人 – 2012-02-01 23:47:55
wincache如果你在一個Windows服務器上 – 2012-02-02 00:06:54