php數據庫連接配合memcache
來源:易賢網 閱讀:1993 次 日期:2014-09-10 11:35:00
溫馨提示:易賢網小編為您整理了“php數據庫連接配合memcache”,方便廣大網友查閱!

采用memcache與數據庫連接查詢的方式進行數據緩存目前是采用單個的memcache服務器,以后會添加多個的

<?php

/**

* @author

* @name data link class and memcache class

* //使用memcache的查詢結果

* 傳送sql語句,返回是查詢后的數組,數組有可能為空

* $dataArrayName = $db->get_Date($sql);

* 如果查詢的是單條數據,則要進行輸出時采用

* $dataArrayName[0]['字段名']的格式

*/

class Datelink

{

private $DateServer = "localhost";//mysql數據庫地址

private $DateBase = "basename";//mysql中的數據庫

private $DateUser = "username";//mysql數據庫連接帳號

private $Datepwd = "userpwd";//mysql數據庫連接密碼

private $dbLink;//連接對象

private $result;//數據查詢結果

private $insert_id;//定義插入序號

private $affected_rows;//定義影響行數

static $data_obj;

private $mem_obj;

#采用單例模式,實例化時進行數據庫連接

function __construct(){

$this->dbLink=@mysql_connect($this->DateServer,$this->DateUser,$this->Datepwd)or die(mysql_error());

if(!$this->dbLink)$this->dbhalt("exsiting error when connecting!");

if(!@mysql_select_db($this->DateBase,$this->dbLink))$this->dbhalt("can't use this database,please check database!");

mysql_query("set names utf-8",$this->dbLink);//如果是utf-8可以改為utf-8

$this->mem_obj = Mem::__GetObj();

}

private function __clone(){}

static function contect_data(){

if(!self::$data_obj instanceof self){

self::$data_obj = new self();

}

return self::$data_obj;

}

function __set($name,$value){//設置屬性

$this->$name=$value;

}

function __get($name){//獲取屬性

return $this->$name;

}

function dbhalt($errmsg){//錯誤反饋

die($errmsg);

}

function get_Date($sql){//僅針對select 查詢進行緩存

if(preg_match("/^select/i",$sql)){//如果是select這里增加memcache內容的判斷

if($this->mem_obj->cache_Obj){//進行mem 查詢看是否存在緩存

if($temp=$this->mem_obj->get($sql)){

$this->result=$temp;

return $temp;

}else{

$this->execute($sql);

$rows = $this->num_rows();

$temp = array();

for ($i=0;$i<$rows;$i++) {

$fields = mysql_num_fields($this->result);

$row = mysql_fetch_array($this->result);

for ($j=0;$j<$fields;$j++) {

if ($i == 0) {

$columns[$j] = mysql_field_name($this->result,$j);

}

$temp[$i][$columns[$j]] = $row[$j];

}

}

//$temp = $this->fetch_array();

$this->mem_obj->set($sql,$temp);

return $temp;

}

}//如果不是select 或者沒有memcache

}

//如果以上沒有進行 memcache的查詢,則進行普通查詢并返回

$this->execute($sql);

$rows = $this->num_rows();

$temp = array();

for ($i=0;$i<$rows;$i++) {

$fields = mysql_num_fields($this->result);

$row = mysql_fetch_array($this->result);

for ($j=0;$j<$fields;$j++) {

if ($i == 0) {

$columns[$j] = mysql_field_name($this->result,$j);

}

$temp[$i][$columns[$j]] = $row[$j];

}

}

return $temp;

}

function fetch_array(){

return mysql_fetch_array($this->result);

}

function execute($sql){//執(zhí)行sql

$this->result = mysql_query($sql,$this->dbLink);

}

function num_rows(){//返回行數,參數記錄集

return mysql_num_rows($this->result);

}

function get_rows($sql){//返回行數,參數為sql

$this->execute($sql);

return $this->num_rows($this->result);

}

function insert($sql){//插入sql-有自動增長序號,返回新建序號

$this->execute($sql);

$this->insert_id = mysql_insert_id($this->dbLink);

$this->free_result($this->result);

return $this->insert_id;

}

function insert_($sql){//插入sql-沒有自動增長序號,返回影響行數

$this->execute($sql);

$this->affected_rows = mysql_affected_rows($this->dbLink);

$this->free_result($this->result);

return $this->affected_rows;

}

function update($sql){//更新sql

$this->execute($sql);

$this->affected_rows=mysql_affected_rows($this->dbLink);

$this->free_result($this->result);

return $this->affected_rows;

}

function del($sql){//刪除sql

$this->execute($sql);

$this->affected_rows=mysql_affected_rows($this->dbLink);

$this->free_result($this->result);

return $this->affected_rows;

}

function free_result(){//釋放記錄集

@mysql_free_result($this->result);

}

function close(){//關閉當前數據庫

@mysql_close($this->dbLink);

}

}//結束class的括號

class Mem{//memcache設置

private $server_ip="";

private $server_port="11211";//默認端口

static $mem_Obj;

public $cache_Obj;

function __construct(){

if($this->cache_Obj=@new Memcache){

if(!@$this->cache_Obj->connect($this->server_ip,$this->server_port))$this->cache_Obj=false; }

}

private function __clone(){}

static function __GetObj(){

if(!self::$mem_Obj instanceof self)self::$mem_Obj = new self;

return self::$mem_Obj;

}

public function set($sql,$tempSource){//設置cache

return $this->cache_Obj->set(md5($sql),$tempSource);

}

public function add($sql,$tmpSource){//add添加cache,如果存在則刪除后添加

if($this->get($sql))$this->del($sql);

return $this->set($sql,$tmpSource);

}

public function get($sql){//獲取cache

if($temp=$this->cache_Obj->get(md5($sql))){

return $temp;

}

return false;

}

public function del($sql){//刪除某個數據

return $this->cache_Obj->delete(md5($sql));

}

public function delAll(){//讓所有cache失效,并不清空,會有新數據取代

return $this->cache_Obj->flush();

}

}

$db=Datelink::contect_data(); //這里是調用數據庫連接

// $db->mem_obj->delAll();//這里可以其清除全部緩存

?>

Memcache與mysql配合查詢,進行數據緩存

更多信息請查看IT技術專欄

更多信息請查看網絡編程
易賢網手機網站地址:php數據庫連接配合memcache
關于我們 | 聯(lián)系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網