站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
SpeedPHP/高效函数缓存器
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
{{SpeedPHP top}} 按函数缓存[[程序]],是sp框架中优化程序执行速度的一个重要功能。通常而言,sp框架的按函数缓存程序会智能地将[[数据库]]查询返回的结果[[数据]]给缓存起来,当程序下次需要这些数据的时候,就不再需要链接数据库再进行查询,而是直接从缓存中获取。 使用按函数缓存程序,无疑可以节省非常多系统资源,尤其是财务、统计、报表以及大型的企业应用程序中,由于其在一次运行后就可以省去后来每次的链接数据库、查询数据和数据复杂运算等诸多的步骤便能从缓存中获取到需要的数据,所以按函数缓存程序是我们开发以及优化应用程序的一个非常必要的手段。 ==使用spCache缓存搜索结果== 在sp框架中使用按函数缓存程序spCache是非常的简单,和其他的Model扩展类一样,几乎也只是在正常的findAll等操作中加上一行语句就可以实现了。 下面我们来看看留言本中的例子: <pre><?php class main extends spController { function index(){ // 这里是首页 $tpl = $this->spArgs("tpl", "green"); $guestbook = spClass("guestbook"); // 下面将会把留言本中findAll的结果缓存3600秒,也就是1小时 $this->results = $guestbook->spCache(3600)->findAll(); $this->display("{$tpl}/index.html"); } function write(){ // 这里是留言 $guestbook = spClass("guestbook"); $guestbook->create($this->spArgs()); // 下面将清除findAll的返回结果,以便可以重新生成缓存,请注意清除缓存的方式和建立缓存的方式是差不多的,只是spCache的参数被设置成-1。 $guestbook->spCache(-1)->findAll(); echo "留言成功,<a href=/index.php>返回</a>"; } } </pre> 这里我们看到了,只在findAll前加入了spCache(3600),那么我们的findAll返回的结果将被缓存。缓存的过程如下: 1.首次访问该页面,spCache执行$guestbook->findAll(); 获取到留言本的数据。 2.然后spCache使用spAccess文本存取程序,将数据保存到临时文件中,同时返回数据。 3.之后一小时内(3600秒),每次访问该页面,执行到$guestbook->spCache(3600)->findAll(); 的时候,spCache都会直接从spAccess中获取到数据并返回,而跳过了查询数据库等操作。 也就是说,spCache会自动检查缓存是否存在,并且还没有过期。缓存不存在,或者是已经过期,spCache都将自动生成新的缓存。在后面的写入留言程序中,由于新的留言已经写入,数据已有更新,但我们缓存的数据并未包括新的留言,所以需要清除缓存,以便可以重新建立新的缓存。 ==重建缓存== 清除缓存的方式也很简单,只要按照生成缓存的方式去写findAll,只是将spCache的参数设置成-1即可。用“$guestbook->spCache(-1)->findAll();”就可以清除“$guestbook->spCache(3600)->findAll(); ”的缓存了。 spCache不仅可以针对函数来进行缓存,而且在函数存在参数的情况下,可以更方便的针对函数某种情况来进行缓存。比如说我们需要将留言本程序中,留言者jake和留言者andy的留言分别进行缓存,那么我们可以用: <pre> $result_one = $guestbook->spCache(3600 * 24)->findAll(array('name'=>'jake')); $conditions = array("name"=>'andy'); $result_two = $guestbook->spCache(3600)->findAll($conditions); </pre> 这样就可以分别缓存两者的数据了,同时对于find函数的情况也是一样的。 我们可以发现,生成缓存和清除缓存的语句是类似的。所以当我们的“$result_two = $guestbook->spCache(3600)->findAll($conditions);”使用了参数$conditions,那么清除这个$result_two缓存的方法,也是需要$conditions的: $conditions = array("name"=>'andy'); $guestbook->spCache(-1)->findAll($conditions); 这样才可以清除$result_two的结果。当然如果在这个时候我们用了“$guestbook->spCache(-1)->findAll()”,那么将清除全部guestbook调用的findAll的缓存,包括上面$result,$result_one和$result_two的结果都将被清除。 ==更广泛的使用== spCache其实不单可以直接在find/findAll等方法上面使用,还可以进一步的在spModel继承类的方法中使用以及在继承类的内部使用。 在spModel继承类的方法中使用,举个例子,比如我们在留言本的guestbook类内建立了一个新的superFindAll方法,功能是在查找留言数据结果的基础上,再[[网络]]连接到UCENTER用户中心上面获取该留言用户信息,最后随着留言的数据一同返回。这里我们就可以用$guestbook->spCache(3600)->superFindAll($conditions)来对该函数进行缓存,那么在设置的时间内,我们的superFindAll都不再需要查找数据库和进行网络数据获取了。 在spModel继承类内部使用也是同样的,比如就是superFindAll方法,是先需要使用$this->findAll()来获取留言数据然后再连接UCENTER的,所以我们也同样可以用$this->spCache(3600)->findAll()来对该数据进行缓存。 ==按函数缓存spCache的注意事项== 使用spCache无疑会带给我们更良好的程序优化方式,但是我们也需要注意合理的使用spCache按函数缓存程序,这个合理性主要体现在: *缓存过期时间的设置。 *用spCache(-1)清除缓存的时机。 *按函数的参数来进行缓存。 ==参考来源== http://speedphp.com/manual.html {{SpeedPHP}} [[category:SpeedPHP|G]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)
本页使用的模板:
模板:SpeedPHP
(
编辑
)
模板:SpeedPHP top
(
编辑
)