本节演示了在控制器内如何使用缓存,其实在其他模块( 如模型、自定义类、视图)内使用方法是一致的。
<?php namespace grace\controller; use grace\database; use grace\grace; use grace\cache; class index extends grace{ public $name = 'a'; public function index(){ // 1. 获取缓存对象 $cacheObject = cache::init(); // 2. 使用缓存方法 获取数据 // $_GET['page'] 用于记录页码 $_GET['page'] = empty($_GET['page']) ? 1 : intval($_GET['page']); if($_GET['page'] < 1){$_GET['page'] = 1;} // cache(缓存名称, 影响数据数组, 不存在缓存数据时执行的数据函数返回数据, 缓存有效期) $this->studentsList = $cacheObject->cache('studentsList', array($_GET['page']), function (){ echo '动态查询执行...'.$this->name; // 3. 动态查询数据,当缓存数据不存在或失效时执行 $studentsTable = database::table('students'); // 3.1 如果没有传递总数先计算总数 if(empty($_GET['total'])){ $_GET['total'] = $studentsTable->count(); } // 3.2 数据查询并实现分页 return $studentsTable ->order('st_id asc') //page(页码, 总数, 每页展示数量, 页码列表总数, 页码形式) ->page($_GET['page'], $_GET['total'], 8, 10, 'a') ->fetchAll(); }, 10); print_r($this->studentsList); // 此处获得最终数据, 可以在视图中直接使用 // print_r($this->studentsList); // 通过调试模式我们可以看出,在有效期内,数据获取只需要连接一次数据库 [ 有效缓解数据库查询压力 ] // 文件型缓存数据文件 位置 : appData/站点名称/caches/缓存名称.php [ 可以观察数据 ] } }
<?php namespace grace\controller; use grace\database; use grace\grace; use grace\cache; class index extends grace{ public $name = 'a'; public function index(){ // 1. 获取缓存对象 $cacheObject = cache::init(); // 2. 使用缓存方法 获取数据 // $_GET['page'] 用于记录页码 $_GET['page'] = empty($_GET['page']) ? 1 : intval($_GET['page']); if($_GET['page'] < 1){$_GET['page'] = 1;} // cache(缓存名称, 影响数据数组, 不存在缓存数据时执行的数据函数返回数据, 缓存有效期) $this->studentsList = $cacheObject->cache( 'studentsList', array($_GET['page']), function (){ return $this->__getStudentsList(); }, 10 ); print_r($this->studentsList); // 此处获得最终数据, 可以在视图中直接使用 // print_r($this->studentsList); // 通过调试模式我们可以看出,在有效期内,数据获取只需要连接一次数据库 [ 有效缓解数据库查询压力 ] // 文件型缓存数据文件 位置 : appData/站点名称/caches/缓存名称.php [ 可以观察数据 ] } // 动态数据查询函数 [ 独立封装 ] public function __getStudentsList(){ // 可以使用 $this-> 共享使用控制器对象的属性和方法 echo '动态查询执行...'.$this->name; // 3. 动态查询数据,当缓存数据不存在或失效时执行 $studentsTable = database::table('students'); // 3.1 如果没有传递总数先计算总数 if(empty($_GET['total'])){ $_GET['total'] = $studentsTable->count(); } // 3.2 数据查询并实现分页 return $studentsTable ->order('st_id asc') //page(页码, 总数, 每页展示数量, 页码列表总数, 页码形式) ->page($_GET['page'], $_GET['total'], 8, 10, 'a') ->fetchAll(); } }