发新话题
打印

ThinkPHP - 数据缓存

ThinkPHP - 数据缓存

ThinkPHP框架为了让应用执行更有效率,采用了多种缓存机制和方法。
这里指的缓存主要指数据缓存,关于模版缓存的描述在模版定义一篇中已经有所涉及。

ThinkPHP在数据缓存方面包括SQL查询缓存、数据对象缓存、静态页面缓存以及浏览器缓存等多种机制,采用了包括文件方式、共享对象方式和数据库方式在内的多种方式进行缓存,让应用开发可以选择更加适合自己的缓存方式,以及合理的进行整合,从而有效地提高应用执行效率。

Action类中实现了几个重要的缓存方法:
cacheData($identify,$data) 缓存数据
getCacheData($identify) 获取缓存数据
delCacheData($identify) 删除缓存数据
并且还为Vo对象和VoList对象定义了专用的调用方法:
cacheVo($vo,$id) 根据id缓存Vo对象
getCacheVo($voClass,$id) 根据id获取Vo对象
delCacheVo($voClass,$id) 根据id删除Vo对象
cacheVoList($voList,$identify) 缓存volist对象
getCacheVoList($voClass,$identify) 获取缓存Volist对象
delCacheVoList($voClass,$identify) 删除缓存VoList对象
同样,在Dao对象中也提供了相应的方法对Vo、VoList对象和查询数据集对象ResultSet进行缓存处理。
而对于SQL查询的缓存实现是在公共查询方法query里面内置实现了。

数据对象缓存
ThinkPHP支持自动数据对象缓存,该功能无需启用动态数据缓存就可以使用了,事实上,ThinkPHP的核心Action类的预定义操作方法中大量使用了数据对象自动缓存功能。第一次读取某个Vo对象会自动生成缓存,重复刷新页面或者其他用户读取该数据对象的时候无需再次访问数据库,而当某个用户对该数据对象进行了修改,系统会自动删除缓存数据对象,以便下次自动重新生成缓存。
自动缓存仅仅适用于数据对象,对于数据列表对象无法完成自动缓存的更新功能。

动态数据缓存
要开启数据动态缓存,需要设置配置文件中的DATA_CACHE_ON 为true,另外需要配合DATA_CACHE_TIME 设置数据缓存的有效期(单位为秒,-1表示永久缓存)和DATA_CACHE_TYPE 数据缓存方式。
目前支持的数据缓存方式有
  • File 文件方式
  • Db 数据库方式
  • Shmop 共享内存方式
  • Eaccelerator Eaccelerator (Turck MMcache fork)
  • Mmcache Turck MMCache
  • Memcache Memched
  • Apc APC
  • Apachenote Apache note
  • Sqlite SQLite



ThinkPHP数据缓存并非全部数据,而是进行分页缓存。为了考虑到有些数据库分页机制的不同,所以对于SQL查询缓存设置了最大缓存记录限制DATA_CACHE_MAX,避免serialize大量数据的开销,如果查询结果超过DATA_CACHE_MAX设置的记录数,则自动进行多文件(区块)缓存,另外可以启用DATA_CACHE_COMPRESS 对缓存数据进行压缩,为了保证数据的完整性,可以启用数据校验DATA_CACHE_CHECK 等。
如果使用文件方式缓存,默认采用PHP后缀保存,并且自动在目录生成index文件以保护缓存访问。另外可以设置文件缓存的头部和尾部
CACHE_SERIAL_HEADER 文件缓存头部, 默认为 '<?php\n//'
CACHE_SERIAL_FOOTER 文件缓存尾部,默认为 '\n?'.'>'
如果采用数据库方式缓存,需要设置缓存数据表名称
DATA_CACHE_TABLE 数据库缓存表名
如果采用共享内存方式缓存,需要设置共享内存分配大小SHARE_MEM_SIZE。

以上设置作为公共缓存设置有效,但是在某些场合,需要对个别数据区分对待,采用不同的缓存方式,新版本对Vo对象引入了一个新的_info属性,是一个数组变量,用来存储一些特殊信息。其中一个_info['cache']变量就是用来单独设置Vo对象的缓存方式的,值包括下列常量:
FCS_CACHE_NO //不缓存
FCS_CACHE_DYNAMIC //动态缓存
FCS_CACHE_STATIC //静态缓存(永久缓存)
如果不做任何设置则默认为 动态缓存方式,读取配置文件定义。

浏览器缓存
ThinkPHP提供了一个浏览器缓存插件,如果启用了浏览器缓存,则系统会根据etag标记和HTTP 304 状态来读取浏览器缓存。在项目配置文件中配置BROWSER_CACHE 来决定是否启用浏览器缓存。

静态缓存
另外ThinkPHP框架一样具备生成静态文件的能力
首先要设置 HTML_PATH 静态文件路径,如果该目录位于WEB目录下面,则采用重定向的方式跳转到静态页面,如果不在WEB目录下,系统自动采用readfile静态页面文件的方式输出。
HTML_CACHE_ON 是否启用静态缓存
HTML_CACHE_TIME 静态缓存有效时间(单位为秒,-1表示永久缓存)
HTMLFILE_SUFFIX 静态文件后缀名 默认为shtml
神迹兄~~好久不见鸟~~~

TOP

发新话题