我的编程空间,编程开发者的网络收藏夹
学习永远不晚
位置:首页-资讯-开源

Drupal7的cache缓存开发实例教程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Drupal7的cache缓存开发实例教程

本文实例讲述了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;

}

上面的例子,结合了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() {

$schema['cache_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表的join查询。

3. 切记缓存中的数据不是永久存储的。任何调用cache_clear_all的代码都会清空缓存。因此无法通过重复计算获取的数据,切勿存储到缓存表。

希望本文所述对大家的drupal建站有所帮助。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Drupal7的cache缓存开发实例教程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Drupal7的cache缓存开发实例教程

本文实例讲述了Drupal7的cache缓存开发的方法。分享给大家供大家参考。具体方法如下: Drupal是一款非常好用的php开发的开源内容管理框架了,这个框架在缓存方面做得非常的不错,下文一起来学习Drupal7 cache缓存开发吧。
2022-06-12

django开发教程之利用缓存文件进行页面缓存的方法

前言 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者Redis中,5分钟内再有人来访问时,则不再去执行vie
2022-06-04

PHP开发缓存的实际应用案例分析

PHP开发缓存的实际应用案例分析引言:随着互联网的快速发展,网站的访问量大幅增加。为了提高网站的性能和响应速度,开发人员需要使用缓存来减少数据库查询,加快数据访问速度。本文将重点介绍PHP中缓存的实际应用案例,包括数据缓存和页面缓存,并提供
PHP开发缓存的实际应用案例分析
2023-11-07

Qt for Android开发实例教程

本文讲述了使用Qt5.3.0开发Android应用的方法,由于官方资料较少,此处记录开发过程遇到的问题及解决方法。具体步骤如下: 1.Android平台的视频播放,只能使用qml的MediaPlayer 2.qml中控件的路径必须加file
2022-06-06

Android开发之登录验证实例教程

本文所述实例源自一个项目开发中的登录验证功能,具体的要求就是,在Android端输入用户名和密码,在服务器端验证MySQL数据库中是否有此用户,实现之前当然首要的是,如何使Android端的数据发送到服务器端,具体的实现方法如下: 服务器端
2022-06-06

windows10系统怎么清理内存windows10系统缓存清理实例教程

如果我们windows10电脑运行内存过满,那样程序运行便会越来越卡屏,那要怎么清理内存呢,首先是开启windows10系统的C盘,点击磁盘清理选择项,等候系统扫描仪垃圾文件,随后点击挑选要删除的垃圾文件,最终点击明确就好啦,等候垃圾文件删
2023-07-13

PHP开发中的缓存机制与应用实战

在 php 开发中,缓存机制通过将经常访问的数据临时存储在内存或磁盘中来提升性能,从而减少数据库访问次数。缓存类型主要包括内存、文件和数据库缓存。php 中可以使用内置函数或第三方库实现缓存,如 cache_get() 和 memcache
PHP开发中的缓存机制与应用实战
2024-05-09

Android开发中使用Volley库发送HTTP请求的实例教程

Android Volley 是Google开发的一个网络lib,可以让你更加简单并且快速的访问网络数据。Volley库的网络请求都是异步的,你不必担心异步处理问题。 Volley的优点:请求队列和请求优先级请求Cache和内存管理扩展性性
2022-06-06

Android App开发中自定义View和ViewGroup的实例教程

View Android所有的控件都是View或者View的子类,它其实表示的就是屏幕上的一块矩形区域,用一个Rect来表示,left,top表示View相对于它的parent View的起点,width,height表示View自己的宽高
2022-06-06

编程热搜

  • wordpress错位如何解决
    这篇文章主要介绍“wordpress错位如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“wordpress错位如何解决”文章能帮助大家解决问题。wordpress
    wordpress错位如何解决
  • 帝国cms调用栏目别名的修改步骤
    请留意下面的修改方法 修改后栏目别名使用 !--bname--] 调用 打开e/class/t_functions.php搜索定位到带模板的栏目导航标签修改1复制代码代码如下://替换变量$bclassname=$class_r[$clas
    帝国cms调用栏目别名的修改步骤
  • 动易Cms MAC验证视图失败的解决方法
    “/”应用程序中的服务器错误。 -------------------------------------------------------------------------------- 验证视图状态 MAC
    动易Cms  MAC验证视图失败的解决方法
  • DEDECMS如何支持中文水印
    DEDECMS如何支持中文水印?修改/include/inc_photograph.php,在165行处加这行代码:$w_text = iconv("GB2312","UTF-8",$w_text);OK,现在可以用中文做水印了,但默认的字体大小是5,中文字体
    DEDECMS如何支持中文水印
  • 快速了解Discuz!程序文件功能
    相信有不少人热衷于基于修改原有系统文件所做的插件,当然了解程序文件功能是最重要的,下面我把Discuz! X2.0主要的程序文件功能说一下。Tips:Q:针对说明的文件是?A:我只基于原版文件对upload目录中基本的程序文件(php,ht
    快速了解Discuz!程序文件功能
  • DedeCMS编辑器fck更换成eWebEditor编辑器具体步骤
    将eWebEditor编辑器插入DEDE后台的效果: 完全Word在线编辑的功能,让你从此摆脱发可编辑器卡得死,进入流畅干净编辑界面新时代。 下面是具体步骤: 首先,你要知道eWebEditor是一个什么工具。 eWebEditor是由国
    DedeCMS编辑器fck更换成eWebEditor编辑器具体步骤
  • 允许 WordPress 上传任意文件的方法
    此时如果上传一个不在预定义编程客栈的安全扩展名列表,如.lrc,会报kAtKhHRl错: F编程客栈ile type does not meet security guidelines. Try another. 解决此问题有两方法: 在
    允许 WordPress 上传任意文件的方法
  • dedecms 软件下载模块中添加下载方式为迅雷下载联盟代码
    修改 /plus/download.php 文件 www.cppcns.com查找
    dedecms 软件下载模块中添加下载方式为迅雷下载联盟代码
  • dedecms网站tag标签全部静态化的解决方法
    更改tags.php文件在根目录 找到$tag = FilterSearch(urldecode($tag)); 替换为:$tag = urldecode($tag); 更改文件arc.taglist.class.php文件文件所在的路径是
    dedecms网站tag标签全部静态化的解决方法
  • 帝国CMS远程保存图片的方法
    本文实例讲述了帝国cms远程保存图片的方法。分享给大家供大家参考。 具体实现方法如下:复制代码代码如下:
    帝国CMS远程保存图片的方法

目录