缓存系统
文章分页:

框架通过数据、页面、浏览器三层缓存机制保证系统高效运行。

数据缓存

利用框架缓存管理系统,可以方便的实现数据库结果集和函数执行结果的缓存,在指定过期时限内不再重复执行,直接从缓存中调用结果,本功能通过缓存功能类实现。

在数据库基础扩展类 base_db 中提供了基本缓存调用方法:

  • $db->setCache($cache, $ttl) - 传入缓存实例 $cache,并指定过期时间为 $ttl秒
  • $db->writeCache($key, $result) - 将内容 $result 写入缓存,对应键值 $key;
  • $db->getCache($key) - 获取对应键值 $key 的缓存内容,如不存在或已过期则返回 false;
  • $db->cache($mode) - 设置缓存模式,0 - 关闭,1 - 可读,2 - 可写,3 - 可读写,默认为 3。

以上方法均已扩展到系统自带的MySQL和MSSQL类中,可以直接通过框架全局数据库实例 $db 直接调用。事实上,在另一个SQL数据库扩展类 base_sql 中,还提供了一系列查询方法,并已经将缓存模式融入,包括:

  • $db->record($sql) - 获取一条数据查询结果数组;
  • $db->records($sql) - 获取所有数据查询结果,并以二维数组的方式返回;
  • $db->result($sql) - 获取某一查询结果的指定项目值。

以上3个方法均会首先检测对应的查询是否存在可用缓存,如果存在则直接返回结果,否则执行查询并将结果保存至缓存。

此外,框架全局缓存实例 $cache 还提供了另外两个方法:

  • $cache->getData($query, $mode, $ttl) - 缓存某一查询语句 $query 所生成的结果,$mode可以为单项(result)、单条(record)或全部(all),过期时间为 $ttl秒,本方法需要调用框架全局数据库实例 $db;
  • $cache->getData_func($func, $args, $ttl) - 缓存某复杂运算函数 $func 的运算结果,$args 为函数的参数(数组模式),保存时间为 $ttl秒。

 

页面缓存

可将解析好的页面整体缓存到缓存文件,在过期前不用再次生成页面,实现了动态静态化的效果,本功能通过模版功能类实现。

在初始化框架模版实例时,第二个参数,同时也是系统全局变量之一,即 $tpl_cache 。如果此参数设置为 false,表示关闭模版缓存,否则,模版系统将依照对应参数设置开启页面缓存,详细设置项目请见页面模版栏目。

对于已经开启了缓存模式的页面,只要执行 $mystep->checkCache($tpl) 即可,其中 $tpl 为主模版(即第一层模版)实例,如果存在可用缓存则直接显示页面结果,并终止程序执行,否则继续执行后续脚本。

 

浏览器缓存

通过etag标识,在客户端再次请求页面数据时,如页面未发生变化,则直接从客户端缓存调用数据,减少了对服务器带宽的请求,本功能通过脚本管理静态文件实现。

框架通过rewrite模式将所有链接请求交由框架统一处理,通过这个特性所有通过框架调用的静态文件均会附带etag标志,相关文件包括:

  • 在上文脚本加载中提及,指定的所有脚本将被合并为一个压缩缓存脚本;
  • 框架 static 目录下的所有文件;
  • 设置项 $ms_setting->gen->static 中提及的所有允许扩展名;
  • 通过框架附加系统上传的所有文件的下载

 

上一篇:模版体系
下一篇:框架钩子