


全文预览已结束
VIP免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Drupal7 cache缓存开发入门教程Drupal是一款非常好用的php开发的开源内容管理框架了,这个框架在缓存方面做得非常的不错,下文一起来学习Drupal7 cache缓存开发入门教程吧。使用Drupal构建复杂而动态的内容是件很容易的事情。但是稍有不慎,你会为这种容易付出代价。在用户查看某些复杂而动态的页面的时候,复杂的数据库查询,与高花销的计算会导致页面性能方面的问题。解决方案之一是在Druapl的后台页面开启页面缓存。页面缓存开启后,可以在某些页面极大的降低数据库查询次数从而提高页面性能。但是这有一定的局限性,就是页面缓存仅仅对匿名用户有效。对应登录用户则会生效。逐渐的,你可能会分析自己写过的代码,找出数据出查询的热点进行缓存优化。幸运的是,Drupal已经内置了一些缓存API,如果遵循下面的一些规则,可以将你的代码优化工作变得更容易。基本规则:规则:如果计算结果可以重用或存储,就不要计算两次。下面的简单例子用来演示这种情况。代码如下复制代码function my_module_function() $my_data = &drupal_static(_FUNCTION_);if (!isset($my_data) /将一些高花销的计算逻辑写在这里,并将结果赋值给$my_data变量。return $my_data;理解上面的的代码,需要一定的php基础知识。首先是知道php有个变量类型是静态变量(static)。drupal_static函数其实就是实现static变量的集中管理。其次是函数前加"&"符号,这种是按址传值。这样的话,对$my_data变量的任何更改,对&drupal_static(_FUNCTION_)都会相应更改。这两点理解后再来看上面的逻辑,发现虽然只有一个if判断,但其实这段代码是精妙无比的。进阶:善用Drupal的cache函数。在上面的代码中,静态变量的数据只会在一次的页面加载过程中有效。如果重新访问该页面,则会重新进行数据的计算。就是说静态变量缓存的数据只是暂时的,没有长久的存储起来。下面的代码,演示如何将复杂的计算结果的数据存储到drupal的cache表中,从而实现长久存储的目的。代码如下复制代码function my_module_function() $my_data = &drupal_static(_FUNCTION_);if (!isset($my_data) if ($cache = cache_get(my_module_data) $my_data = $cache-data;else /将一些高花销的计算逻辑写在这里,并将结果赋值给$my_data变量。/这里将计算的结果保存到cache表中。cache_set(my_module_data, $my_data, cache);return $my_data;data;else /将一些高花销的计算逻辑写在这里,并将结果赋值给$my_data变量。/这里将计算的结果保存到cache表中。cache_set(my_module_data, $my_data, cache);return $my_data;上面的例子,结合了cache_set与cache_get,对计算出的结果数据缓存到Drupal的cache表中;在第一次执行的时候,需要复杂计算;但是第二次执行这段代码的时候,数据内容会直接从cache表中读取,从而避免复杂的计算开销或数据库查询,有一次提升代码执行的效率。缓存数据更新如果使用cache_set()方式设置的cache数据过期了怎么办?默认情况下,cache_set设置的缓存会一直存储在数据库中,直到你调用cache_clear_all()函数进行强制清空缓存(如果安装了admin_menu模块,使用admin menu提供的清空缓存功能也可以清除cache表的缓存)。如果你的数据是比较零散的更新,新濠天地娱乐城可以在每次数据更新的时候,调用cache_clear_all(my_module_data, cache)进行缓存数据的更新。如果是存储的一些有规律的数据片段,可以通过如下方式使用通配符的方式进行清空缓存。代码如下复制代码cache_clear_all(my_module, cache, TRUE);这种方式会清空所有以my_module为开头的缓存。如果你的缓存的过期时间是有规律的,可以预测的,可以尝试使用下面方式来给缓存设置过期时间。代码如下复制代码cache_set(my_module_data, $my_data, cache, time() + 3600);最后一个参数是unix时间戳,表示是缓存的过期时间。在这个例子中,缓存在设置的一个小时后过期,缓存中的数据自动被丢弃。定制自己的缓存表在上面的代码展示过程中,如果你细心,你会发现cache_set()函数的第三个参数"cache",这个其实是代表cache的数据表的名字。如果你需要使用大量的缓存,最好可以使用一个独立的数据表来存数缓存数据;这样有利于加速数据查询的速度。大名鼎鼎的views模块就使用了这种技术来实现其缓存控制策略。最简单,最Drupal化的定制自定义缓存表的方式,是在模块的install文件里执行hook_schema().以下是例子:代码如下复制代码function mymodule_schema() $schemacache_mymodule = drupal_get_schema_unprocessed(system, cache);return $schema;上面的函数中的drupal_get_schema_unprocessed(system, cache)用来获取Drupal默认的cache表结构的定义供cache_mymodule表使用。如果你想彻底压榨服务器的性能,只要在settings.php文件里添加少量代码,就可以让Drupal cache_set,cache_get等函数调用的cache系统用其他的缓存系统来替换。比如广受欢迎的memcache(基于内存的缓存,博狗效率极高),APC(基于文件的缓存)等。只要使用标准的Drupal cache函数,即使更改了缓存系统,也不需要修改你的代码。一些注意点:1:切勿为了缓存而缓存。比如从数据库查询一条结果,将一条结果写入数据库,这些都是很轻的操作,没必要使用缓存。推荐使用devel模块来查找代码方面性能瓶颈并进行针对性的优化。2:缓存表存数的数据都是blob类型的,切勿做与cache表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石大学前儿童保育学课外必读:3儿童营养及保健研究
- 施工项目部管理人员资格报审表模板
- 新版华为 H35-210V2.5HCIA-Access 接入网考试复习题库
- 当前政法队伍建设面临的主要问题与挑战
- 2025至2030年中国电力专用测试钳行业投资前景及策略咨询报告
- 2025至2030年中国环式刨片机行业投资前景及策略咨询报告
- 2025至2030年中国照明行灯变压器行业投资前景及策略咨询报告
- 中学生心理健康教育一课件
- 2025至2030年中国滑扣行业投资前景及策略咨询报告
- 2025至2030年中国消光型脂肪族聚氨酯水分散液行业投资前景及策略咨询报告
- 铁路隧道掘进机法技术规程
- DLT 5434-2021 电力建设工程监理规范表格
- 屋顶光伏劳务合同范本
- 二年级语文下册第一至八单元复习教案
- 西门子数字化制造数据采集与管理系统(SCADA)描述两份文件
- 2024年山东济南初中生物会考模拟试卷(解析版)
- HYT 083-2005 海草床生态监测技术规程(正式版)
- 捐赠行为中的神经科学研究
- 西南联大与现代中国智慧树知到期末考试答案章节答案2024年云南师范大学
- 2024年西藏中考地理测试(原卷版)
- 经典文学与诗意人生智慧树知到期末考试答案2024年
评论
0/150
提交评论