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数据库缓存依赖发布的使用理解的更多相关文章
- ASP.NET缓存全解析6:数据库缓存依赖 转自网络原文作者李天平
更多的时候,我们的服务器性能损耗还是在查询数据库的时候,所以对数据库的缓存还是显得特别重要,上面几种方式都可以实现部分数据缓存功能.但问题是我们的数据有时候是在变化的,这样用户可能在缓存期间查询的数据 ...
- (转)ASP.NET缓存全解析6:数据库缓存依赖
ASP.NET缓存全解析文章索引 ASP.NET缓存全解析1:缓存的概述 ASP.NET缓存全解析2:页面输出缓存 ASP.NET缓存全解析3:页面局部缓存 ASP.NET缓存全解析4:应用程序数据缓 ...
- Asp.net数据库缓存依赖
Asp.net数据库缓存依赖 更多的时候,我们的服务器性能损耗还是在查询数据库的时候,所以对数据库的缓存还是显得特别重要,上面几种方式都可以实现部分数据缓存功能.但问题是我们的数据有时候是在变化的,这 ...
- Asp.net mvc+EF+Sql Server2008数据库缓存依赖
1.开启数据库缓存依赖功能(开启对数据库中表Article和ArticleType的缓存) (注:)如果要配置SqlCacheDependency,则需要以命令行的方式执行. aspnet_regsq ...
- c# 数据库缓存依赖
1.为缓存依赖项启动通知数据库 在vs开发人员命令提示中运行(切换到aspnet_regsql.exe所在目录,示例目录:C:\Windows\Microsoft.NET\Framework64\v4 ...
- ASP.NET 数据库缓存依赖
By Peter A. Bromberg, Ph.D. 在ASP.NET中,Cache类最酷的特点是它能根据各种依赖来良好的控制自己的行为.以文件为基础的依赖是最有用的,文件依赖项是通过使用 Cach ...
- Yii2.0 数据库查询 [ 2.0 版本 ]
下面介绍一下 Yii2.0 对数据库 查询的一些简单的操作 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的 ...
- yii2.0数据库查询修改等方法
yii2.0学习有一段时间了,给大家分享一下一些简单的查询等如何操作. 查询:(这里最前面的Test是引用的模型名) Test::find()->all(); 此方法返回所有数据: Tes ...
- yii2.0 Cache缓存
1.控制器中CacheDemoController.php 1 <?php 2 /** 3 * Created by PhpStorm. 4 * User: liangzi 5 * Date: ...
随机推荐
- 自动清除firefox缓存
1.在firefox的地址栏上输入about:config回车 2.找到browser.cache.check_doc_frequency选项,双击将3改成1保存即可. 选项每个值都是什么含义的.请 ...
- VMware10中安装centos7没有可用的网络设备
1.问题描述 centos7安装到虚拟机无法上网 2.安装环境 win7 x64 WM 10.01 iso CentOS-7-x86_64-DVD-1503-01.iso {4.01G} ...
- 《Java多线程编程核心技术》读后感(七)
volatile关键字 主要作用是使变量在多个线程间可见. 关键字volatile与死循环 package Second; public class PrintString { private boo ...
- ural 1500 Pass Licenses (状态压缩+dfs)
1500. Pass Licenses Time limit: 2.5 secondMemory limit: 64 MB A New Russian Kolyan believes that to ...
- linux c二级指针的内存分配和使用
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h> ...
- HDU - 2962 Trucking SPFA+二分
Trucking A certain local trucking company would like to transport some goods on a cargo truck from o ...
- HDU - 1546 ZOJ - 2750 Idiomatic Phrases Game 成语接龙SPFA+map
Idiomatic Phrases Game Tom is playing a game called Idiomatic Phrases Game. An idiom consists of sev ...
- element ui 修改默认样式
修改element ui默认的样式 如果要组件内全局修改 首先在浏览器里F12找到element默认的UI类名 找到要修改的默认类名以后 在文件中修改代码,重写属性 <style> .el ...
- ue4 c++ anim notify
http://blog.csdn.net/or_7r_ccl/article/details/54564962 直接在sequence or montage中new个Event 然后在graph中接收 ...
- codevs 3342绿色通道
3342 绿色通道 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold