ThinkPHP的数据缓存功能应该是一个非常大的特色,期间也经历了不少完善,主要由Cache类来完成,并且以工厂模式支持了很多的缓存方式,目前支持的有:
File 文件方式
Db 数据库方式
Shmop 共享内存方式
Eaccelerator Eaccelerator (Turck MMcache fork)
Memcache Memched
Apc APC
Apachenote Apache note
Sqlite SQLite
Xcache
对于用户来说,并不需要了解具体某种缓存方式实现的细节,而是统一通过公共的接口方法来实现缓存写入和读取,包括有效期设置,缓存的使用范围可以用在框架的各个层次,包括数据库查询缓存、数据对象缓存、应用自定义缓存等,使用缓存类的方式如下:
- Import("Think.Util.Cache");
- // 取得缓存实例 其中type参数表示上面列出的缓存类型 默认为File类型
- $cache = Cache: :getInstance($type);
- // 写入缓存
- $cache->set($name,$value,$expire);
- // 读取缓存
- $cache->get($name);
- // 删除缓存
- $cache->rm($name);
- // 清空缓存
- $cache->clear($name);
通常来说缓存会自动管理,过期的会自动清除,所以不需要手动来清除,在0.9.8版本以后,还增加了更加方便缓存操作的S方法,例如,上面的操作可以简化为:
- // 写入缓存数据
- S($name,$value,$expire);
- // 读取缓存数据
- S($name);
- // 删除缓存
- S($name,NULL);
- // 另外还可以指定其它的缓存方式操作
- S($name,$value,$expire,$type)
ThinkPHP支持自动数据对象缓存,该功能无需启用动态数据缓存就可以使用了,事实上,ThinkPHP的核心Action类的预定义操作方法中大量使用了数据对象自动缓存功能,第一次读取某个Vo对象会自动生成缓存,重复刷新页面或者其他用户读取该数据对象的时候无需再次访问数据库,而当某个用户对该数据对象进行了修改,系统会自动删除缓存数据对象,以便下次自动重新生成缓存,自动缓存仅仅适用于数据对象,对于数据列表对象无法完成自动缓存的更新功能.
框架还支持对缓存读写次数的统计功能.