自定义缓存类
自定义缓存类
您可以将某个相同类型的缓存封装为一个类文件,便于项目的复用并使得缓存管理更有模块感。
自定义缓存基础类 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); } }