对于产品中经常需要生成一些缓存类的东西,比如系统基础配置,商品分类等,每次修改调整后都要手动进行缓存发布,是不是非常麻烦!这时候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数据库缓存依赖发布的使用理解的更多相关文章

  1. ASP.NET缓存全解析6:数据库缓存依赖 转自网络原文作者李天平

    更多的时候,我们的服务器性能损耗还是在查询数据库的时候,所以对数据库的缓存还是显得特别重要,上面几种方式都可以实现部分数据缓存功能.但问题是我们的数据有时候是在变化的,这样用户可能在缓存期间查询的数据 ...

  2. (转)ASP.NET缓存全解析6:数据库缓存依赖

    ASP.NET缓存全解析文章索引 ASP.NET缓存全解析1:缓存的概述 ASP.NET缓存全解析2:页面输出缓存 ASP.NET缓存全解析3:页面局部缓存 ASP.NET缓存全解析4:应用程序数据缓 ...

  3. Asp.net数据库缓存依赖

    Asp.net数据库缓存依赖 更多的时候,我们的服务器性能损耗还是在查询数据库的时候,所以对数据库的缓存还是显得特别重要,上面几种方式都可以实现部分数据缓存功能.但问题是我们的数据有时候是在变化的,这 ...

  4. Asp.net mvc+EF+Sql Server2008数据库缓存依赖

    1.开启数据库缓存依赖功能(开启对数据库中表Article和ArticleType的缓存) (注:)如果要配置SqlCacheDependency,则需要以命令行的方式执行. aspnet_regsq ...

  5. c# 数据库缓存依赖

    1.为缓存依赖项启动通知数据库 在vs开发人员命令提示中运行(切换到aspnet_regsql.exe所在目录,示例目录:C:\Windows\Microsoft.NET\Framework64\v4 ...

  6. ASP.NET 数据库缓存依赖

    By Peter A. Bromberg, Ph.D. 在ASP.NET中,Cache类最酷的特点是它能根据各种依赖来良好的控制自己的行为.以文件为基础的依赖是最有用的,文件依赖项是通过使用 Cach ...

  7. Yii2.0 数据库查询 [ 2.0 版本 ]

    下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的 ...

  8. yii2.0数据库查询修改等方法

    yii2.0学习有一段时间了,给大家分享一下一些简单的查询等如何操作. 查询:(这里最前面的Test是引用的模型名) Test::find()->all();    此方法返回所有数据: Tes ...

  9. yii2.0 Cache缓存

    1.控制器中CacheDemoController.php 1 <?php 2 /** 3 * Created by PhpStorm. 4 * User: liangzi 5 * Date: ...

随机推荐

  1. java的clone()的使用

    clone()方法的约定 首先明确的是clone()是object的方法.Cloneable接口没有任何方法,它只起到标识的作用.(java的原型模式有用到) Cloneable接口的目的是作为对象的 ...

  2. caffe c++

    http://blog.csdn.net/yao_zhuang/article/details/1853625

  3. WPF ChangePropertyAction中TargetName和TargetObject的区别

    在wpf页面布局中经常用到ChangePropertyAction来更改属性,在这个里面有TargetName和TargetObject两个属性,都表示需要修改的控件名称,那么这两个有什么区别呢,通过 ...

  4. Hive与表操作有关的语句

    Hive与表操作有关的语句 1.创建表的语句: Create [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COM ...

  5. 4-数组、指针与字符串1.3-this指针

    this指针时一个隐含于每一个类的成员函数中的特殊指针(包括构造函数和析构函数),它用于指向正在被成员函数操作的对象. this指针明确地指出了成员函数当前所操作的数据所属的对象.实际过程是,当通过一 ...

  6. 2.6用tr进行转换

    tr可以对来自标准输入的内容进行字符替换.字符删除以及重复字符压缩.它可以将一组字符变成另一组字符,因而通常也被称为转换命令. 1.tr只能通过stdin(标准输入),而无法通过命令行参数来接受输入. ...

  7. HDU - 6081 2017百度之星资格赛 度度熊的王国战略

    度度熊的王国战略  Accepts: 644  Submissions: 5880  Time Limit: 40000/20000 MS (Java/Others)  Memory Limit: 3 ...

  8. Linux 之问题集锦(一)

    1. 打开目录时,怎么只显示一个窗口 计算机 -- 编辑 -- 首选项 -- 行为 -- 总是总浏览器窗口中打开 2. linux中添加PATH时出现 Found a swap file by the ...

  9. 洛谷P2257 YY的GCD(莫比乌斯反演)

    传送门 原来……莫比乌斯反演是这么用的啊……(虽然仍然不是很明白) 首先,题目所求如下$$\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=prim]$$ 我们设$f(d)$表示$g ...

  10. SAP中对于获取订单的状态

    在SAP中对于如何获取订单的状态,提供了至少两个函数,分别是 STATUS_READ 和   STATUS_TEXT_EDIT.下面简单介绍这两个函数 1.STATUS_READ  改函数的实现原理大 ...