• 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 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;
            }
  • 相关阅读:
    图像 resize 代码:保留 aspect ratio(长宽比)
    Pytorch lr_scheduler 中的 last_epoch 用法
    torch.optim用法(参数组的设置)
    课程式学习(Curriculum Learning)
    扇贝单词本-隐藏中文释义 tampermonkey
    电话号码正向标记认证网站申请地址
    考研英语做题计时器网页版(每隔3分钟播放声音,提醒计时)
    mac关闭自动更新后还在每天提醒进行安装更新
    mac 自动生成自签证书脚本
    Ditto
  • 原文地址:https://www.cnblogs.com/itsharehome/p/8284595.html
Copyright © 2020-2023  润新知