2010-01-19 108 views
3

我打算在CakePHP中使用缓存。我想知道如果我更新了我的表上的数据会发生什么,CakePHP会重新缓存我的数据吗?关于在CakePHP中缓存的问题

在此先感谢!

回答

5

不是自动的,没有。

无论您缓存的内容在到期前还是更新之后都不会更改。这就是缓存的一点。诀窍是定义一个适当的过期时间表和/或删除/刷新缓存,当有什么变化,你想立即反映。

假设你有一个博客,并且你需要缓存首页,因为它每次都会收到如此多的点击,并且每次往返数据库都会导致服务器关闭。无论何时创建或编辑博客文章,您都可以无限期地缓存页面,清理缓存以强制更新。

或者,假设您显示Twitter的职位,这是不断更新的名单,但因为Twitter规定的更新频率的限制,则无法刷新他们每一次。在检查新帖子之前,您需要使用时间有限的缓存,例如10分钟。或者,比方说,从数据库中拉出一些信息的纯粹操作非常昂贵,所以你不想每次都这样做,但是你总是需要最新的数据。在这种情况下,你做一个小的,便宜的查询,以找出是否因为你缓存它的最后一次数据已经改变(如取一定纪录的modified时间戳字段),并根据这些信息决定是否启动越贵操作或只使用缓存的数据。

特定策略取决于您的情况。

+1

这适用于仅查看缓存,但值得一提:“重要的是要记住,如果在缓存视图中使用的模型被修改,Cake将清除***缓存视图。 http://book.cakephp.org/view/348/Clearing-the-Cache – deizel 2010-01-20 16:27:27

+1

@deizel我用视图缓存为不幸的是这说明没有工作的最后一次。也许它在最新版本中有。 – deceze 2010-01-20 23:15:18

2

有CakePHP中的几种类型的高速缓存方法和高速缓存引擎: http://book.cakephp.org/view/156/Caching

我使用的是默认的文件缓存引擎。您可以配置您想要在core.php文件中缓存数据的时间。例如,我创建了一个'short'缓存和一个'long'缓存。

Cache::config('short', array(
    'engine' => 'File', 
    'duration'=> '+1 hours', 
    //'path' => CACHE, 
    //'prefix' => 'cake_short_' 
)); 

Cache::config('long', array(
    'engine' => 'File', 
    'duration'=> '+1 week', 
    'probability'=> 100, 
    //'path' => CACHE . 'long' . DS, 
)); 

所以每当你要读取或写入数据缓存,你可以指定这个配置的名字就知道多久缓存。更多信息:http://book.cakephp.org/view/767/Cache-write