账户中心 退出系统
开发文档 资讯·分享 技术交流 会员登录
phpGrace GSCMS 公众号系统
控制器使用缓存示例

演示说明

本节演示了在控制器内如何使用缓存,其实在其他模块( 如模型、自定义类、视图)内使用方法是一致的。

匿名函数形式示例

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

}