资讯专栏INFORMATION COLUMN

Yii2性能优化之:缓存依赖

cyqian / 2618人阅读

摘要:因为依赖的文件发生了变化,缓存即被失效。当数据库查询出的内容发生变化时候,缓存即会受到影响。首先还是获取缓存组件实例化类依赖名为。同时将其过期时间设置为秒之后,最后一个参数写上依赖。

Yii中的缓存依赖,简单来说就是将缓存和另外一个东西绑定在一起,如果另外一个东西发生变化,那么缓存也将发生变化。有点儿类似于JS中的触发事件(但是也不那么像),缓存的变动是依赖的东西所导致的。

依赖可以是文件、数据库、甚至是一些表达式。功能十分强大。

Yii提供了5中依赖方法,我们这里介绍其中的3种常用依赖。

1、文件依赖

顾名思义就是将缓存和文件绑定在一起。如果文件的内容发生变化,那么缓存将会收到影响。(Yii判断的标准是文件的最后修改时间)

我们通过实例来演示一下这个过程。

1、首先获取缓存组件

$cache = Yii::$app->cache;

2、实例化FileDependency类(其中文件依赖名字为:fileName),同时将其赋值给$dependency变量。这里,我们将缓存和yanying.txt文件做关联,如果yanying.txt内容发生变化,那么和之对应的缓存将失效,不能访问。

$dependency = new yiicachingFileDependency(["fileName"=>"yanying.txt"]);

3、下面我们在缓存中添加一个keyfile_key,给其的值为hello world。同时将过期时间设置为3000秒,最后一个参数写上$dependency依赖。

$cache->add("file_key","hello world",3000,$dependency);

4、在3000秒之内,我们刷新网页。一直可以获取到file_key的值为hello world

$cache->get("file_key"); // hello world

5、这时,我们改变yanying.txt文件内的值。尽管缓存并没有过期,我们也无法获取到缓存的值。因为依赖的文件发生了变化,缓存即被失效。

var_dump($cache->get("file_key")); // false
2、表达式依赖

表达式依赖是将表达式运算过后的值和缓存捆在一起形成依赖,当表达式值发生变化时候,缓存将受到影响

1、同上获取缓存组件

$cache = Yii::$app->cache;

2、实例化ExpressionDependency类(表达式依赖名字为:expression),同时将其赋值给$dependency变量。这里,表达式依赖不同于文件依赖,他的expression所对应的是Yii::$app->request->get("id"),是直接get链接中的id值(这里的表达式是php表达式,不只限制于YII代码)。

$dependency = new yiicachingExpressionDependency(["expression"=>"Yii::$app->request->get("id")"]);

3、下面我们在缓存中添加一个keyfile_key,值为hello world。同时将其过期时间设置为3000秒之后,最后一个参数写上$dependency依赖。

$cache->add("file_key","hello world",3000,$dependency);

4、在3000秒之内,我们刷新网页,同上,一直可以获取到file_key的值为hello world

$cache->get("file_key"); // hello world

5、这时,我们改变链接中id的值。那么:Yii::$app->request->get("id")获取到的值即会发生变化,则缓存失效。同时无法获取缓存的值。

var_dump($cache->get("file_key")); // false
3、db依赖

db依赖也是实际生产中最常接触的一种依赖,我们可以将SQL语句直接作为依赖条件。当数据库查询出的内容发生变化时候,缓存即会受到影响。

依此,我们可以通过此方法来判断我们缓存的数据是否需要更新,当数据库有变化内容时候,我们更新缓存。

1、首先还是获取缓存组件

$cache = Yii::$app->cache;

2、实例化DbDependency类(db依赖名为:sql)。同时将其赋值给$dependency变量。其中sql对应的值是直接可执行的sql语句。

$dependency = new yiicachingDbDependency(["sql"=>"SELECT COUNT(*) FROM user"]);

3、下面我们在缓存中添加一个keyfile_key,值为hello world。同时将其过期时间设置为3000秒之后,最后一个参数写上$dependency依赖。

$cache->add("file_key","hello world",3000,$dependency);

4、假设数据库数据一直没有发生变化,那么3000秒之内此缓存不会发生任何变化。我们可以通过下面代码直接获取值hello world.

$cache->get("file_key"); // hello world

5、这时,如果数据库添加了一条新的数据,那么此缓存即将失效,无法获取。这里sql依赖判断标准是查询结果,我们这里使用了记录的条数,你也可以直接使用select * from table只要结果发生变化,都会影响缓存

var_dump($cache->get("file_key")); // false

这时我们也可以愉快的重新获取数据库值,进行新的缓存啦。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30434.html

相关文章

  • 北哥大话Yii2缓存机制 - 缓存依赖

    摘要:我们都知道,的缓存是支持依赖的,就是我们设置的缓存是否失效除了过期时间还决定于它所依赖的东东是否变化。用好依赖将大大提高我们使用缓存的效果,本节讲解缓存的种依赖方式。现在我们仍然通过一个例子说明,假设我们的一个缓存同时依赖于两个依赖。 我们都知道,yii2的缓存是支持依赖的,就是我们设置的缓存是否失效除了过期时间还决定于它所依赖的东东是否变化。 用好依赖将大大提高我们使用缓存的效果,本...

    klivitamJ 评论0 收藏0
  • 北哥大话Yii2缓存机制 - File缓存

    摘要:讲的好长作为北哥大话缓存机制第一篇,希望大家喜欢,为了一段日子里我会专注于分享的缓存机制。 有的兄弟一定会说,File缓存有什么好讲的那?不就是一个set,然后在一个get么?那你知道的只是皮毛~ 的确如大家所说,缓存从表现层看就是一个set(放数据),然后再一个get(拿数据),但是请记住,这样是不够的,如果你不了解每个缓存的实现原理、存储特点等等,你是无法使用对场景的,什么时候用F...

    cnTomato 评论0 收藏0
  • YII2通过composer优化vendor

    摘要:本文讨论通过工具安装框架并优化过程中遇到的问题,约定读者对基本原理有一定了解,并且有安装框架的实际经验。这个命令是优化包的关键一环。命令要谨慎使用。 本文讨论通过composer工具安装Yii2框架并优化Vendor过程中遇到的问题,约定读者对composer基本原理有一定了解,并且有安装Yii2框架的实际经验。 在Yii2社区里经常会遇到一类问题,那就是 安装完官方推荐的版本后1 ...

    dcr309duan 评论0 收藏0
  • Yii2性能优化:类的延迟加载技术介绍

    摘要:据官方介绍,框架广泛的使用了一种叫做延迟加载的技术,从而达到这样的效果。比如我们在判断中,需要实例化类的时候,再去加载相应的文件。代码如下等于不等于优化过后的文件效率肯定得到了提升,这个也就是类的延迟加载雏形。这就是的延迟加载了。 Yii框架号称最高效的PHP框架,执行效率高出其他框架很多。据官方介绍,Yii框架广泛的使用了一种叫做延迟加载的技术,从而达到这样的效果。 下面我们就通过实...

    tuniutech 评论0 收藏0

发表评论

0条评论

cyqian

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<