对于产品中经常需要生成一些缓存类的东西,比如系统基础配置,商品分类等,每次修改调整后都要手动进行缓存发布,是不是非常麻烦!这时候Yii2.0的缓存依赖发布就起到至关重要的作用了!现将主要的使用流程介绍如下:
1、在需要缓存依赖发布的数据表新增一个update_time字段,每次添加、修改记录后都会相应改变update_time的值:
2、保证需要缓存依赖发布的数据表每次保存(包括更新操作)都能更新update_time的值:
// 所有表model继承的基础BaseModel.php /** * @name 重写Yii2.0 beforeSave方法,达到自动更新缓存字段update_time的目的 * @author TestMe * @date 2016-12-06 * @see yiidbBaseActiveRecord::beforeSave($insert) */ public function beforeSave($insert) { // 定义需要设置依赖缓存的表 $cacheTable = [ SysConfig::tableName(), SysCodeDetail::tableName(), SysMenu::tableName(), ]; $cacheTable = array_flip($cacheTable); if (array_key_exists($this->tableName(), $cacheTable) && $this->hasAttribute('update_time')) { $this->setAttribute('update_time', time()); } return parent::beforeSave($insert); }
3、设置数据库缓存依赖:
// 所有表model继承的基础BaseModel.php
/** * @name 获取缓存数据库依赖 * @author testMe * @date 2016-12-06 * @param array $params 缓存依赖参数 * @example * 1.请检查使用model对应表是否有update_time字段 * 2.对应使用model请继承BaseModel * 3.调用BaseModel的getCacheDbDependency()方法 */ public static function getCacheDbDependency($params = []) { // 缓存依赖sql $dbDependencySql = self::find()->select('max(update_time)') ->where('deleted=0') ->createCommand() ->sql; // 设置缓存依赖 $dbDependency = new DbDependency(); $dbDependency->db = Yii::$app->components['db']; $dbDependency->sql = $dbDependencySql; $dbDependency->params = $params; return $dbDependency; }
4、发布缓存时使用:
// 获取缓存依赖 $dbDependency = SysCodeDetail::getCacheDbDependency(); $cache = Yii::$app->cache; // 更新缓存文件 $result = $cache->set('SysCodeEnum', SysCode::$_enum, 0, $dbDependency); if (!$result) { return false; }