缓存

缓存是提升 Web 应用性能简便有效的方式。通过将相对静态的数据存储到缓存并在收到请求时取回缓存,应用程序便节省了每次重新生成这些数据所需的时间。

缓存可以应用在 Web 应用程序的任何层级任何位置。在服务器端,在较的低层面,缓存可能用于存储基础数据,例如从数据库中取出的最新文章列表;在较高的层面,缓存可能用于存储 一段或整个 Web 页面,例如最新文章的渲染结果。在客户端,HTTP 缓存可能用于将最近访问的页面内容存储到浏览器缓存中。

SF支持以下几种缓存机制:

  • 数据缓存
  • 页面缓存
  • HTTP缓存

数据缓存

数据缓存目的将数据库查询结果存储到缓存中,下次请求数据直接从缓存读取,不需要再从数据库查询,从而减少数据库压力。

SF支持memcache、memcached和redis三种适配缓存,缓存配置:

  1. ;适配器 memcachememcachedredis
  2. resources.cache.adapter = memcached
  3. resources.cache.host = 127.0.0.1
  4. resources.cache.port = 11211

memcache和memcaced支持多缓存:

  1. ;适配器 memcachememcached
  2. resources.cache.adapter = memcached
  3. resources.cache.multi_cache = true
  4. resources.cache.server.0.host = 127.0.0.1
  5. resources.cache.server.0.port = 11211
  6. resources.cache.server.1.host = 127.0.0.1
  7. resources.cache.server.1.port = 11212
  8. resources.cache.server.2.host = 127.0.0.1
  9. resources.cache.server.2.port = 11213

如下代码是常用的缓存demo:

  1. //从缓存读取数据
  2. $data = Star_Cache::get($key);
  3. if ($data === false)
  4. {
  5. //重新拉取$data数据
  6. //写入缓存
  7. Star_Cache::set($key, $data);
  8. }

页面缓存

页面缓存指的是在服务器端缓存整个页面的内容。随后当同一个页面被请求时,内容将从缓存中取出,而不是重新生成。

页面缓存实例:

  1. <?php
  2. class IndexController extends Star_Controller_Action
  3. {
  4. public function init()
  5. {
  6. }
  7. public function indexAction()
  8. {
  9. //开启缓存 有三个参数1.缓存key,默认action 2.缓存时间,默认60秒 3.是否强制刷新 默认false
  10. $this->openCache();
  11. //是否存在缓存
  12. if ($this->hasCache() == true)
  13. {
  14. //显示缓存
  15. return $this->showCache();
  16. }
  17. //业务逻辑
  18. }
  19. }
  20. ?>
提示:页面缓存开启会写入缓存文件,application/caches 目录需要可写入权限。

HTTP缓存

除了服务器端缓存外, Web 应用还可以利用客户端缓存去节省相同页面内容的生成和传输时间。通过向客户端发送 Last-ModifiedCache-Control 头指定了页面的常规缓存策略:

  1. //指定缓存时间
  2. Star_Http_Response::setBrownerCache(600);