关于片段缓存和页面缓存 [ 未指定版本 ]
最近用yii,然后看到片段缓存和页面缓存,感觉还挺好用的,现在有几点疑惑:
1.后台如何判断片段缓存存在,如果存在,我就不从数据库取数据,如果不存在就取,注意,是片段缓存,不是那种yii::app()->cache->get('id')来判断的
2.当我数据更新了的时候,我怎么删除指定的片段缓存,我打开片段缓存和页面缓存的文件看了,类似于页面静态化,但是貌似现在我只能通过设置失效时间,我现在更新数据后要删除对应的片段缓存,请问如何实现了
3.页面缓存,和片段缓存的问题差不多,我的数据更新后,我要如何删除指定的页面缓存,貌似有个缓存依赖
'dependency' => array(
'class' => 'CDbCacheDependency',
'sql' => "SELECT MAX(updated) FROM city",
)
这里我的表名为city,updated是最后修改时间,但是一直报错CDbCommand 无法执行 SQL 语句: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated' in 'field list'. The SQL statement executed was: SELECT MAX(updated) FROM city,事实上我有updated列,而且我是想不通过依赖关系,在数据更新的时候直接删除对应的页面缓存文件怎么实现呢?
菜鸟求大神解答。。。
关于报错的原因我找到了,是因为我使用的是多数据库,而CDbCacheDependency默认的是db,其他问题继续求高手解答...
共 3 个回答
-
最近也在搞这个yii缓存,目前我知道的是添加一个依赖,比如下面的
`<?php if($this->begincache('123123', array('duration'=>3600, 'dependency'=>array( 'class'=>'system.caching.dependencies.CDbCacheDependency', 'sql'=>'select max(id) from pagelist', ),
))) { ?>
<?php foreach($page_result as $value){ echo $value->title."<br/>"; }?> <?php $this->endcache(); } ?>`
当我数据库里有最大id改变的时候,数据会自动更新再次缓存起来。这样一来就没有判定是否存在和删除的必要了。
但是我有个疑惑,因为这样依赖也是每次都要去查询数据库的,难道这个缓存就是用小查询换取大查询这样来节省开支吗?
不知还有没有其他更好的办法?
366675462
最后登录:2018-10-23
在线时长:1小时59分
- 粉丝2
- 金钱5
- 威望0
- 积分15