对于产品中经常需要生成一些缓存类的东西,比如系统基础配置,商品分类等,每次修改调整后都要手动进行缓存发布,是不是非常麻烦!这时候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. matlab形态学图像处理之strel函数

    转自:http://blog.sina.com.cn/s/blog_b1cd5d330101pmwi.html strel--structuring element 运用各种形状和大小构造元素,基本语 ...

  2. Working Experience - WPF 中 DataGrid 控件的应用

    问题: 添加控件后, 编辑单元格会出现异常 绑定 ItemsSource 属性后, 更新绑定对象的数据, UI 不刷新 如何显示控件中 ComboBox 类型 解决方法: 绑定 ItemsSource ...

  3. Excel .net读取

    public void LoadData(string StyleSheet) { string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Dat ...

  4. JavaScript DOM知识 (一)

    特性.方法 类型.返回类型 说明 nodeName String 节点的名字:根据节点类型而定义 nodeValue String 节点的值:根据节点的类型而定义 nodeType Number 节点 ...

  5. Git入门 时光穿梭鸡 版本回退 工作区 暂存区

    分布式集中式 CVS及SVN都是集中式的版本控制系统 , 而Git是分布式版本控制系统 集中式版本控制系统,版本库是集中存放在中央服务器的, 而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得 ...

  6. Lightoj1007【欧拉函数-素数表】

    基础题. PS:注意unsigned long long; 以及%llu #include<bits/stdc++.h> using namespace std; typedef unsi ...

  7. excel常用函数之find,left,right,mid,len

    mid =MID(A2,FIND("时间",A2)+2,10) 第一个 : 提取对象 第二个: 开始位置 第三个: 提取多少 find =FIND(“时间”,A2,1) 第一个: ...

  8. 根据rowid删除最新数据(rowid最大为最新数据)(转)

    https://blog.csdn.net/liuyuehui110/article/details/43524379

  9. [UE4]C++实现动态加载的问题:LoadClass()和LoadObject()

    http://aigo.iteye.com/blog/2281558 原文作者:@玄冬Wong 相关内容:C++静态加载问题:ConstructorHelpers::FClassFinder()和FO ...

  10. 汇总:unity中弹道计算和击中移动目标计算方法

    http://download.jikexueyuan.com/detail/id/432.html 弹道计算是游戏里常见的问题,其中关于击中移动目标的自动计算提前量的话题,看似简单,其实还是挺复杂的 ...