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;
        }

原文地址:https://www.cnblogs.com/itsharehome/p/8284595.html

时间: 2024-10-15 12:51:57

Yii2.0数据库缓存依赖发布的使用理解的相关文章

开启SQLSERVER数据库缓存依赖优化网站性能

很多时候,我们服务器的性能瓶颈会是在查询数据库的时候,所以对数据库的缓存非常重要,那么有没有一种方法,可以实现SQL SERVER数据库的缓存,当数据表没有更新时,就从缓存中读取,当有更新的时候,才从数据表中读取呢,答案是肯定的,这样的话我们对一些常用的基础数据表就可以缓存起来,比如做新闻系统的新闻类别等,每次就不需要从数据库中读取了,加快网站的访问速度. 那么如何开启SQLSERVER数据库缓存依赖,方法如下: 第一步:修改Web.Config的<system.web>节的配置,代码如下,让

.NET 数据库缓存依赖策略实现

处理大型门户网站 一般都需要 使用缓存技术这个web加速器在 PHP 和 java 一般 使用的是 基于squid 来做. 当然在 windows .NET 平台也是可以的 squid有 windows版本.这个以后再去研究,现在 就介绍一下 .NET 自带的 缓存策略.Microsoft的petshop就用到了它; 一.基于数据库触发(设置缓存依赖策略,当数据库中数据发生变化时,触发缓存失效;但微软提供的解决方案目前仅支持SQL Server,如果是ORACLE需要自己实现触发接口). 二.基

Asp.net数据库缓存依赖

Asp.net数据库缓存依赖 更多的时候,我们的服务器性能损耗还是在查询数据库的时候,所以对数据库的缓存还是显得特别重要,上面几种方式都可以实现部分数据缓存功能.但问题是我们的数据有时候是在变化的,这样用户可能在缓存期间查询的数据就是老的数据,从而导致数据的不一致.那有没有办法做到,数据如果不变化,用户就一直从缓存中取数据,一旦数据变化,系统能自动更新缓存中的数据,从而让用户得到更好的用户体验. 答案是肯定的!.NET已经为我们提供了这样一种非常好的解决方法:SqlCacheDependency

c# 数据库缓存依赖

1.为缓存依赖项启动通知数据库 在vs开发人员命令提示中运行(切换到aspnet_regsql.exe所在目录,示例目录:C:\Windows\Microsoft.NET\Framework64\v4.0.30319):    aspnet_regsql -S .  -U sa -P pwd -ed -d xxx  -et -t xxx; 缓存依赖禁用: aspnet_regsql -S . \ds -E -dd -d XXX -S服务器名称 -E集成身份验证 -U 账号 -P 密码  -ed为

使用 SQL 缓存依赖项,数据库缓存依赖 (附实例)

使用 SQL 缓存依赖项 最简单的缓存策略就是使缓存数据在一个指定的时间周期后过期.但是这个简单的方法意味着缓存数据没有保持与底层数据源的联系,从而导致过期数据长时保存或当前数据很快过期.更好的方法是使用 SqlCacheDependency 类,这样数据一直被缓存,直到其底层数据在 SQL 数据库中被修改.本篇教程将讲解怎样使用这个类. Part 1 简介 使用 ObjectDataSource 缓存数据 和在架构中缓存数据 教程中探讨的缓存技术使用基于时间的有效期 , 在指定的周期过后从缓存

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

yii2.0学习有一段时间了,给大家分享一下一些简单的查询等如何操作. 查询:(这里最前面的Test是引用的模型名) Test::find()->all();    此方法返回所有数据: 这些查询出来是对象形式,但是一般转换成数组格式: Test::find()->asArray()->all();     加上asArray()就取得数组形式的数据了,下面的自行添加. Test::findOne($id);   此方法返回 主键 id=1  的一条数据(举个例子): 条件查询:wher

YII2.0 数据库增删改查

/*==================== dkhBaseModel 数据库增删改查方法 start ================================*/ //新增一条数据 public function baseInsertData($data){ if(!is_array($data)) {return $this->setError(['errmsg'=>'data Error']);}; $db = \Yii::$app->db; $ok = $db->c

[moka学习笔记]yii2.0数据库查询的多种方法(未完待整理)

方法一:(使用model) $modelCommunityMail = CommunityMail::find()->where(['com_id'=>$id])->all(); 方法二:(直接拼写sql语句) $sql = "select * from `usho_community_mail` where date_format(`created_at`,'%Y%m') = date_format(curdate() ,'%Y%m') AND `com_id`=$id AN

Yii2.0数据库操作增删改查详解

1.简单查询: one(): 根据查询结果返回查询的第一条记录. all(): 根据查询结果返回所有记录. count(): 返回记录的数量. sum(): 返回指定列的总数. average(): 返回指定列的平均值. min(): 返回指定列的最小值. max(): 返回指定列的最大值. scalar(): 返回查询结果的第一行中的第一列的值. column(): 返回查询结果中的第一列的值. exists(): 返回一个值,该值指示查询结果是否有数据. where(): 添加查询条件 wi