2014-08-18 11:14:38 7533次浏览 3条回答 0 悬赏 10 金钱

最近用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列,而且我是想不通过依赖关系,在数据更新的时候直接删除对应的页面缓存文件怎么实现呢?
菜鸟求大神解答。。。

补充于 2014-08-18 11:38

关于报错的原因我找到了,是因为我使用的是多数据库,而CDbCacheDependency默认的是db,其他问题继续求高手解答...

  • 回答于 2014-08-18 21:39 举报

    请楼主改一下标签,注意是用半角逗号分隔开。

  • 回答于 2014-08-21 14:59 举报

    最近也在搞这个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改变的时候,数据会自动更新再次缓存起来。这样一来就没有判定是否存在和删除的必要了。
    但是我有个疑惑,因为这样依赖也是每次都要去查询数据库的,难道这个缓存就是用小查询换取大查询这样来节省开支吗?
    不知还有没有其他更好的办法?

  • 回答于 2014-08-25 16:55 举报

    挺头疼头疼头疼头疼头疼头疼头疼头疼头疼头疼头疼头疼头疼坎坎坷坷啦啦啦

您需要登录后才可以回答。登录 | 立即注册
366675462
实习生

366675462

注册时间:2014-08-18
最后登录:2018-10-23
在线时长:1小时59分
  • 粉丝2
  • 金钱5
  • 威望0
  • 积分15

热门问题