connect($OJ_MEMSERVER, $OJ_MEMPORT);
}
}
//下面两个函数首先都会判断是否有使用memcache,如果有使用,就会调用memcached的set/get命令来保存和获取数据
//否则简单地返回false
# Gets key / value pair into memcache … called by mysql_query_cache()
function getCache($key) {
global $memcache;
// if ($memcache->get($key)) echo "true";
return ($memcache) ? $memcache->get($key) : false;
}
# Puts key / value pair into memcache … called by mysql_query_cache()
function setCache($key, $object, $timeout = 60) {
global $memcache;
return ($memcache) ? $memcache->set($key,$object,MEMCACHE_COMPRESSED,$timeout) : false;
}
# Caching version of pdo_query()
function mysql_query_cache($sql){
global $OJ_NAME,$OJ_MEMCACHE;
$linkIdentifier = false;
$timeout = 60;
//首先调用上面的getCache函数,如果返回值不为false的话,就说明是从memcached服务器获取的数据
//如果返回false,此时就需要直接从数据库中获取数据了。
//需要注意的是这里使用操作的命令加上sql语句的md5码作为一个特定的key,可能大家觉得使用数据项的
//名称作为key会比较自然一点。运行memcached加上"-vv"参数,并且不作为daemon运行的话,可以看见
//memcached处理时输出的相关信息
$num_args = func_num_args();
$args = func_get_args(); //获得传入的所有参数的数组
$args = array_slice($args,1,--$num_args);
$key=md5($OJ_NAME.$_SERVER['HTTP_HOST']."mysql_query" . $sql.implode(" ",$args));
if (!($cache = getCache($key))) {
$cache = false;
$cache =pdo_query($sql,$args);
//将数据放入memcached服务器中,如果memcached服务器没有开的话,此语句什么也不会做
//如果开启了服务器的话,数据将会被缓存到memcached服务器中
if (!setCache($key, $cache, $timeout)) {
# If we get here, there isn’t a memcache daemon running or responding
if($OJ_MEMCACHE) echo "You can run these command to get faster speed:
sudo apt-get install memcached
sudo apt-get install php5-memcache
sudo apt-get install php-memcache";
}
}
return $cache;
}
?>