2009-03-04 42 views
0

ello全部 即時通訊新的php和服務器腳本(來自java/cpp背景) 我的問題是,如果我喜歡能夠建立某種單音緩存,將持有我的數據在內存中的所有web應用程序 生活,當我啓動web服務器,它將啓動主緩存 ,將服務器web應用程序不會在會議內靜態緩存 像C++/java中的singletone映射,一直離開 我的選擇是什麼?如何在php中使用全局緩存?

回答

3

對於PHP來說,你需要APC,它現在幾乎與PHP一樣標準(並且是PHP 6的標準版本) - 所有你需要做的就是在配置中啓用它 - 或者memcached,特別是如果你有某種集羣解決方案。

0
function resetCache(){ 
    restoreCacheSession(); 
    session_unset(); 
    restoreTrueSession(); 
} 

function restoreCacheSession(){ 

    $sessionId = session_id(); 
    if(strlen($sessionId)) { 
     $origSetting = ini_get('session.use_cookies'); 
     session_write_close(); 
    } 

    session_id('cache'); 
    ini_set('session.use_cookies', false); 
    session_start(); 

    if($sessionId) 
    { 
     $_SESSION["_trueSessionId"] = $sessionId; 
     $_SESSION["_trueSessionSettings"] = $origSetting; 
    } 
} 

function restoreTrueSession(){ 
    if(isset($_SESSION["_trueSessionId"])){ 
     $sessionId = $_SESSION["_trueSessionId"]; 
     $origSetting = $_SESSION["_trueSessionId"]; 
    } 

    session_write_close(); 

    if(isset($sessionId)) { 
     ini_set('session.use_cookies', $origSetting); 
     session_id($sessionId); 
     session_start(); 
    } 
    elseif(isset($_COOKIE['phpSESSID'])){ 
     session_id($_COOKIE['phpSESSID']); 
     session_start(); 
    } 
    else { 
     session_start(); 
     session_unset(); 
     session_regenerate_id(); 
    } 
} 

function cache($var, $value = null){ 
    restoreCacheSession(); 
    if(!isset($value)){ 
     if(isset($_SESSION[$var])){ 
      $result = $_SESSION[$var]; 
     } 

     restoreTrueSession(); 
     return isset($result)?$result:null; 
    } 

    $_SESSION[$var] = $value; 

    restoreTrueSession(); 
} 

要在緩存中設置一個變量,你只需要<?php cache("yourvarname",yourvarvalue) ?> 爲了獲得在緩存中變量的值:<?php cache("yourvarname") ?> 要重置緩存<?php resetCache("yourvarname") ?>