zoukankan      html  css  js  c++  java
  • 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;
            }
  • 相关阅读:
    浅入了解GCD 并发 并行 同步 异步 多线程
    XSD
    想在Images.xcassets 只能用 imageNamed 加载里边的素材 其他方法 你就别费老劲了
    如何在SCENEKIT使用SWIFT RUNTIME动态加载COLLADA文件
    编译 wxWidgets3.0.2 on Mac OS X Yosemite 出错?!的解决方法
    3、技术积累方面总结
    2、日常计划管理总结
    站在客户的角度考虑问题
    公司管理的一点思虑
    项目管理一定要规范阿
  • 原文地址:https://www.cnblogs.com/itsharehome/p/8284595.html
Copyright © 2011-2022 走看看