tp 数据缓存

    在页面初始化加载的时候,经常会进行重复性的数据库访问,如果数据库存储量过大,那么等待的时间将会很长,thinkPHP 提供了多种关于数据缓存的方式。对于不经常变动的、经常查询的表数据进行数据缓存可以加快系统运行速度,使用户体验效果得到很好的提升。

    以下代码利用 tp 的 F 方法来进行数据缓存,首先获取到 sql 语句,并通过 MD5 加密的方式来进行缓存文件的命名,如果系统存在该 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);
    }
}

对于编辑类的操作(新增、修改、删除),则需要进行缓存文件的清除

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); 
  }
}

 

转载于:https://my.oschina.net/u/3460260/blog/1606132

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值