Yii2性能优化之:缓存依赖
2018-01-10 09:19
375 查看
转自 https://segmentfault.com/a/1190000006861193?_ea=1155522#911
Yii中的缓存依赖,简单来说就是将缓存和另外一个东西绑定在一起,如果另外一个东西发生变化,那么缓存也将发生变化。有点儿类似于JS中的触发事件(但是也不那么像),缓存的变动是依赖的东西所导致的。
依赖可以是文件、数据库、甚至是一些表达式。功能十分强大。
Yii提供了5中依赖方法,我们这里介绍其中的3种常用依赖。
顾名思义就是将缓存和文件绑定在一起。如果文件的内容发生变化,那么缓存将会收到影响。(Yii判断的标准是文件的最后修改时间)
我们通过实例来演示一下这个过程。
1、首先获取缓存组件
2、实例化
3、下面我们在缓存中添加一个
4、在3000秒之内,我们刷新网页。一直可以获取到
5、这时,我们改变
表达式依赖是将表达式运算过后的值和缓存捆在一起形成依赖,当表达式值发生变化时候,缓存将受到影响
1、同上获取缓存组件
2、实例化
3、下面我们在缓存中添加一个
4、在3000秒之内,我们刷新网页,同上,一直可以获取到
5、这时,我们改变链接中
db依赖也是实际生产中最常接触的一种依赖,我们可以将SQL语句直接作为依赖条件。当数据库查询出的内容发生变化时候,缓存即会受到影响。
依此,我们可以通过此方法来判断我们缓存的数据是否需要更新,当数据库有变化内容时候,我们更新缓存。
1、首先还是获取缓存组件
2、实例化
3、下面我们在缓存中添加一个
4、假设数据库数据一直没有发生变化,那么3000秒之内此缓存不会发生任何变化。我们可以通过下面代码直接获取值
5、这时,如果数据库添加了一条新的数据,那么此缓存即将失效,无法获取。这里sql依赖判断标准是查询结果,我们这里使用了记录的条数,你也可以直接使用
这时我们也可以愉快的重新获取数据库值,进行新的缓存啦。
Yii中的缓存依赖,简单来说就是将缓存和另外一个东西绑定在一起,如果另外一个东西发生变化,那么缓存也将发生变化。有点儿类似于JS中的触发事件(但是也不那么像),缓存的变动是依赖的东西所导致的。
依赖可以是文件、数据库、甚至是一些表达式。功能十分强大。
Yii提供了5中依赖方法,我们这里介绍其中的3种常用依赖。
1、文件依赖
顾名思义就是将缓存和文件绑定在一起。如果文件的内容发生变化,那么缓存将会收到影响。(Yii判断的标准是文件的最后修改时间)我们通过实例来演示一下这个过程。
1、首先获取缓存组件
$cache = \Yii::$app->cache;
2、实例化
FileDependency类(其中文件依赖名字为:
fileName),同时将其赋值给
$dependency变量。这里,我们将缓存和
yanying.txt文件做关联,如果
yanying.txt内容发生变化,那么和之对应的缓存将失效,不能访问。
$dependency = new \yii\caching\FileDependency(['fileName'=>'yanying.txt']);
3、下面我们在缓存中添加一个
key为
file_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 \yii\caching\ExpressionDependency(['expression'=>'\Yii::$app->request->get("id")']);
3、下面我们在缓存中添加一个
key为
file_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 \yii\caching\DbDependency(['sql'=>'SELECT COUNT(*) FROM user']);
3、下面我们在缓存中添加一个
key为
file_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
这时我们也可以愉快的重新获取数据库值,进行新的缓存啦。
相关文章推荐
- 缓存技术之——Yii2性能优化之:缓存依赖
- 缓存技术之——Yii2性能优化之:缓存依赖
- C#开启SQLSERVER数据库缓存依赖优化网站性能
- 如何开启SQLSERVER数据库缓存依赖优化网站性能
- ASP.NET性能优化之构建自定义文件缓存
- 前端性能优化:网络存储的静态缓存和非必要内容优化
- Android ListView性能优化之视图缓存
- Android性能优化之关于缓存的构思
- 设置Derby缓存优化查询性能
- 网站性能优化 静态缓存技术
- 如何开启SQLSERVER数据库缓存依赖优化网站性能
- MySQL数据库性能优化之缓存参数优化
- iOS开发UI篇—UITableviewcell的性能优化和缓存机制
- SQL性能优化前期准备-清除缓存、开启IO统计
- MySQL DBA教程:Mysql性能优化之缓存参数优化
- log4j日志输出性能优化-缓存、异步
- 网站性能优化-缓存
- H5 缓存机制浅析 - 移动端 Web 加载性能优化
- H5 缓存机制浅析 移动端 Web 加载性能优化
- 项目性能优化——缓存