如何在PHP中使用全局缓存?

时间:2009-03-04 03:45:17

标签: php caching

所有人都好 我是php和服务器脚本的新手(来自java / cpp背景) 我的问题是,如果我想能够构建某种单音缓存,它将把我的数据保存在所有Web应用程序的内存中 生活,当我启动Web服务器时,它将启动主缓存 这将服务于Web应用程序不在会话静态缓存中 像c ++ / java中的单一地图一样留下了 我有什么选择?

2 个答案:

答案 0 :(得分:3)

对于PHP中的这个,你需要APC,这几天就像PHP的标准一样(从PHP 6开始就是标准的) - 所有你需要做的就是在配置中启用它 - 或memcached,特别是如果你有某种集群解决方案。

答案 1 :(得分: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") ?>