自定义缓存类

自定义缓存类

您可以将某个相同类型的缓存封装为一个类文件,便于项目的复用并使得缓存管理更有模块感。  
自定义缓存基础类 cacheBase 内同样封装了 cache()、clearCache()、removeCache() 函数。

cache() 函数

功能 : 创建缓存( 自动判断缓存有效性 );
参数 :
$name : 缓存名称
$queryMethod : 缓存数据不存在时执行的数据查询函数,建议以 __( 2个下划线 )开头;
$id = null (别名$parameter): 影响 id,字符串或数组形式 ( 作用 : 同一个缓存名称因为参数不同而产生不同的缓存数据 );
$timer = 3600 : 缓存游戏时间,单位 : 秒;
$isSuper = true : 是否为一个全局缓存;// 非全局缓存会在名称前自动添加控制器及方法名;返回 : 经过缓存机制处理的缓存数据

clearCache() 函数

功能 : 清空全部缓存;

removeCache() 函数

功能 : 清空全部缓存;
参数 : 
$name : 缓存名称
$id = null(别名$parameter) : 影响 id,字符串或数组形式 ( 作用 : 同一个缓存名称因为参数不同而产生不同的缓存数据 );
$isSuper = true : 是否为一个全局缓存;

自定义缓存创建步骤

01 在 phpGrace/caches/ 文件夹下创建您的自定义缓存类文件文件;
02 缓存类文件命名规则 : 缓存类名称.php
03 类命名规则 : class 缓存类名称 extends \cacheBase{}
04 使用命名空间 : namespace phpGrace\caches;

自定义缓存类演示代码

<?php
// 缓存类 针对 students 数据表
namespace phpGrace\caches;

class students extends \cacheBase{

   // 外部调用使用 cache 函数,自定义类只需实现数据获取算法
   public function __getList(){
      // 创建 数据表操作对象
      echo 'I am __getStudentsList, i have runed ......';
      $db = db('students');
      return $db->order('st_id desc')->fetchAll();
   }
   
   public function __getInfo(){
      echo 'I am __getInfo, i have runed ......';
      $db = db('students');
      return $db->where('st_id = ?', array($this->id))->fetch();
   }
   
}

调用缓存类代码

<?php
class indexController extends grace{

    public $studentsCache;

    public function __construct(){
        parent::__construct();
        // 初始化 students 缓存类
        $this->studentsCache = new \phpGrace\caches\students();
    }

    public function index(){
        // 利用 studentsCache 的 cache 函数自动完成缓存的构建读取工作
        // 使用 $this->studentsList ($this->) 即可将数据共享给视图
        $this->studentsList  =
            $this->studentsCache
            ->cache('studentsList', null, '__getList', 10);
        //p($this->studentsList);

        /* 调用详情缓存演示 */
        // 假设 $this->gets[0] 为一个 students 数据表的主键的值,如 :
        // http://localhost/index/index/5
        if(empty($this->gets[0])){$this->gets[0] = 5;}
        // 利用对象属性给 __getInfo() 函数 传递数据 ( 数据表的主键 )
        $this->studentsCache->id = $this->gets[0];
        $this->studentInfo = $this->studentsCache->cache('studentInfo', array($this->gets[0]), '__getInfo', 10);
        p($this->studentInfo);
    }

    // 通过控制器利用自定义缓存对象清空缓存
    public function clearAllCache(){
        // $this->clearCache(); 可以通过控制器直接清楚
        $this->studentsCache->clearCache();
    }

    // 通过控制器利用缓存对象删除某个具体缓存
    public function delCache(){
        // 删除 studentsList 的第一页缓存数据
        $this->studentsCache->removeCache('studentsList', 1);
    }
}