tp 數據緩存

    在頁面初始化加載的時候,常常會進行重複性的數據庫訪問,若是數據庫存儲量過大,那麼等待的時間將會很長,thinkPHP 提供了多種關於數據緩存的方式。對於不常常變更的、常常查詢的表數據進行數據緩存能夠加快系統運行速度,使用戶體驗效果獲得很好的提高。php

    如下代碼利用 tp 的 F 方法來進行數據緩存,首先獲取到 sql 語句,並經過 MD5 加密的方式來進行緩存文件的命名,若是系統存在該 sql 語句的文件,則獲取到緩存數據,若是不存在,則進行數據庫鏈接,並將查詢結果進行緩存。sql

protected function _getTableJson($sql, $model=null){
  $model = $model ? $model : M(MODULE_NAME); // 實例化對象
  $startRows = ($_POST["page"]-1)*$_POST["rows"]; // 獲取分頁信息,計算開始字段
  $endRows   = $_POST["page"] * $_POST["rows"];   // 獲取分頁信息,計算結束字段
  $sort = $_POST["sort"]; $order = $_POST["order"]; // 獲取排序字段
  $orderBy   = $sort ? "ORDER BY $sort $order" : "";	
			
  $sqlCount = "SELECT COUNT(*) AS tp_count FROM($sql)";
  $sqlRows = "SELECT * FROM (SELECT thinkphp.*, rownum AS numrow FROM (
	$sql $orderBy)thinkphp)
	WHERE (numrow > $startRows)
	AND (numrow <= $endRows)";
		
  $count = $this->judgeCache($sqlCount, $model); 
  $count = intval($count[0]['tp_count']); 
  if(0 == $count){
    $res['total'] = 0; 
    $res['rows'] = '';
    echo json_encode($res);
    die();
  }
			
  $list = $this->judgeCache($sqlRows, $model);
  $res['total'] = $count; $res['rows'] = $list;
  echo json_encode($res);
}
	 
// 判斷是否存在緩存數據,存在獲取數據,不存在鏈接數據庫
function judgeCache($sql, $model){
  $fileName = MODULE_NAME.'/'.MD5($sql);  // 緩存文件名,進行 MD5 加密
  // 判斷緩存文件是否存在
  if(false === F($fileName)){
    $data = $model->query($sql);
    F($fileName, $data);
	return $data;
    }else{
	return F($fileName);
    }
}

對於編輯類的操做(新增、修改、刪除),則須要進行緩存文件的清除thinkphp

function delCacheFile( $dirName ) { 
  $dirName = $dirName?$dirName:DATA_PATH.MODULE_NAME;
  if($handle=opendir($dirName)){ 
    while(false !== ($item=readdir($handle))){
	if($item!="."&&$item!=".."){
		if(is_dir("$dirName/$item")){  
			$this->delCacheFile("$dirName/$item");  
		}else{  
			unlink("$dirName/$item");
		}  
	} 
    }  
    closedir($handle);  
    rmdir($dirName); 
  }
}
相關文章
相關標籤/搜索