用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1544|回复: 4
收起左侧

文档里面的缓存和缓存适配器讲的有什么区别?

[复制链接]
发表于 2015-3-9 20:23:23 | 显示全部楼层 |阅读模式
刚才了解了一下缓存功能。
http://codeigniter.org.cn/user_guide/general/caching.html
这里将的缓存使用很方便,只需要在需要使用的地方调用
$this->output->cache(n);
就可以了。
我本地测试也没什么问题。
PHP复制代码
 
        public function index()
        {
                $this->output->cache(10);
 
                $this->load->view('welcome_message');
        }
 
 
复制代码

这样在第一次访问的时候会在cache目录下生成一个文件。
当下次再访问这个URL的时候就直接输出cache里面的文件了。

如果页面中有一部分的内容需要每次访问的时候更新,就通过ajax来更新。

论坛里面也讨论了如果对URL进行安全判断,防止被恶意攻击。

http://codeigniter.org.cn/user_guide/drivers/caching.html
这个缓存适配器讲的和之前的有什么不同?
 楼主| 发表于 2015-3-9 20:24:22 | 显示全部楼层
另外能不能设置缓存文件永远存在 除非手动删除?
发表于 2015-3-9 22:22:03 | 显示全部楼层
一个是页面缓存,另一个是数据缓存。

你可能会希望把网站的导航菜单从数据库中查询出来,并保存到缓存文件或缓存服务器中,这样可以很大程度上减少对数据库的访问。

而页面缓存则是把控制器输出的结果缓存到了文件中,其中包括了完整的HTML代码。比如你这时候修改了导航菜单的名称并更新了数据缓存,而页面缓存还没有到期,你看到的仍然是之前的页面。

发表于 2015-3-9 23:16:18 | 显示全部楼层
dolphin 发表于 2015-3-9 20:24
另外能不能设置缓存文件永远存在 除非手动删除?

我的印象中数据缓存可以通过把时间设置为0($this->cache->save('config', $config, 0);),使其永不过期。但如果你使用的是类似Memcached的缓存服务有可能缓存服务本身具有强制过期的机制。

而页面缓存必须指定缓存时间,如果使用 $this->output->cache(0); 这样的语句,设置缓存时间为0,则不会生成缓存文件。

还要注意一点是页面缓存的时间单位是分钟,而其他的是秒。

 楼主| 发表于 2015-3-10 09:07:45 | 显示全部楼层
pcjingl 发表于 2015-3-9 23:16
我的印象中数据缓存可以通过把时间设置为0($this->cache->save('config', $config, 0);),使其永不过期 ...

非常感谢。明白了。这么看来对于CMS这样的内容型系统页面缓存比较有用,因为很多页面生成后基本都是固定的html了。
而对于电子商务这样的系统数据缓存比较有用,因为和数据库交互很频繁。

本版积分规则