Yii2.0数据库缓存依赖发布的使用理解

Posted 冰狼爱魔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yii2.0数据库缓存依赖发布的使用理解相关的知识,希望对你有一定的参考价值。

 对于产品中经常需要生成一些缓存类的东西,比如系统基础配置,商品分类等,每次修改调整后都要手动进行缓存发布,是不是非常麻烦!这时候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 \\yii\\db\\BaseActiveRecord::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;
        }

 

以上是关于Yii2.0数据库缓存依赖发布的使用理解的主要内容,如果未能解决你的问题,请参考以下文章

如何使用yii2的缓存依赖特性

Rails:旧数据与新数据不匹配时如何更新片段缓存

学习yii2.0——依赖注入

YII2.0版本框架利用composer安装

[Yii2.0] 以Yii 2.0风格加载自定义类或命名空间 [配置使用Yii2 autoloader]

小明谈谈你对Spring三级缓存和循环依赖的理解建议收藏