欢迎各位兄弟 发布技术文章

这里的技术是共享的

Drupal系统中Cache缓存实践经验

这是一篇翻译国外的 Drupal Cache缓存的实践文章,缓存是Drupal中的一个重要应用,对Drupal感兴趣的朋友可以认真阅读。

drupal教程:Cache在drupal的中应用

drupal本身会在多个层面执行php代码,这就造成了它需要大量的时间来输出内容。Cache(缓存)是最大化提高drupal性能的关键性技术。在决定采取何种缓存机制之前,我们必须知道该站是何种类型以及什么样的用户回来访问该站。并不是所有的站点都有相同的缓存机制。(解释:就本站而言,采用的缓存技术主要有APC,Boost)

缓存技术需要根据不同数据类型以及对用户的影响来区分。Drupal中的缓存可以根据以下两大类用户来区分:

    匿名用户
    登陆用户

传送给匿名用户的html页面是相同的但传送给登陆用户的html却不完全相同,比如说“welcome ‘user name’”。所以我们可以通过给匿名用户缓存的页面可以获得非常高的网站速度。现在我们一起来看一下drupal中都有哪些缓存技术:

Drupal 内置缓存

drupal内置的缓存机制可以让我们轻松扩展drupal站点。存储在cache表中的数据可以被快速读取。drupal的内置缓存还可以跟后端的缓存系统集成从而替代掉默认的缓存数据表。drupal缓存的设置在admin/config/development/performance页面,他包含以下选项:

    Cache pages for anonymous users:启用对匿名用户的页面缓存。
    Cache blocks: 启用drupal区块缓存(区块缓存会被页面缓存忽略掉)。
    Minimum cache lifetime: 最小缓存生命周期。
    Expiration of cached pages: 最大缓存生命周期。

使用drupal cache api 自定义的drupal缓存

drupal核心提供了缓存api可以帮助你将缓存存储到cache表中去。大量数据可以被存储到特定的cache表中,比如,views模块使用cache_views以及cache_views_data来存储views的缓存。 以下是几个主要的drupal 缓存 api:

    cache_set($cid, $data, $bin = 'cache', $expire = CACHE_PERMANENT)
    cache_get($cid, $bin = 'cache')
    cache_clear_all($cid = NULL, $bin = NULL, $wildcard = FALSE)

Drupal views cache:

drupal的views模块使用cache_views以及cache_views_data两张表来存储views中产生的缓存。默认情况下cache是关闭的,但你可以在每个独立的views display中将它开启。它能够允许我们为每个views display来缓存查询结果和页面输出。如果你生成了区块,你可以将该block输出到drupal内建的block 缓存中去。

Memcache

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。他帮助你降低数据库负载且速度非常快。他通常被用来加速那些专为登录用户开发的网站。他需要一个守护进程(memcached)并且有一个php拓展来使用该服务。但他不能支持共享服务器。 Drupal的memcache module集成drupal以及memcache。你需要设置memcached为drupal的后端缓存系统以便集成该服务到drupal的cache系统。修改一下settings文件即可:

    $conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc';
    $conf['cache_default_class'] = 'MemCacheDrupal';
    $conf['cache_class_cache_form'] = 'DrupalDatabaseCache';
    $conf['memcache_key_prefix'] = 'unique_key'; /Multisite installation/

Opcode Cache

有几个php的插件可以将程序代码转化为bytecode。bytecode能够跳过第二次的再编译过程。它能够降低页面加载时间、降低cpu占用。这种技术被称作Opcode Caching。 APC (Alternative PHP Cache) 是这些php Opcode Caching扩展中最常用的一个。(本站有安装教程) Zend Opcache 是另外一个可供选择的php扩展。默认情况下他是编译在php v5.5+。他包含很多apc所没有的高级特性,但不支持user缓存。


Reverse Proxy - Varnish

Varnish是一款高性能的开源HTTP加速器。 Varnish 扮演着web 服务器跟用户中间代理人的角色。当Varnish收到用户的页面请求,他首先检查他内部的缓存,如果找到缓存的页面,他将该页面返回给用户,否则再去向原始web服务器区索取内容。 Drupal的 varnish module集成Drupal跟Varnish HTTP 加速器。你需要在你的配置文件 /etc/varnish/default.vcl中添加如下的参数:

backend default {
   .host = "127.0.0.1";
   .port = "8000";
 }

注意:drupal performance页面的选项Page cache lifetime通常也定义了Varnish cache过期周期。

Boost

Drupal的boost module提供类似于Varnish的页面缓存。用户请求内容时候,他将早先生成的静态html页面返回给用户,避免了二次生成。 如果能够看到以下信息,即代表了你的模块生效啦。 (可以右键查看该页面的源码,我们也使用了boost来加速网站) boost对匿名用户很有效果,你可以配合Memcached 来加速登录用户。
Content Delivery Networks (CDN)

CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。 Drupal的cdn module可以为你的drupal站点加速。唯一遗憾的是cdn可能花费你一定的费用。

结论

以上的各种技术提供给你了更多缓存选择,通常情况下都可以配置出最佳cache实践。但更多的是需要因地制宜,结合不同的站点特点来选择技术、修改配置等。

附drupal官网教程 https://www.drupal.org/node/627252

来自  http://www.111cn.net/wy/CMS/87594.htm

唯物品评历史

关注"唯物品评历史",跟着泪痕春雨先生,读懂历史,看彻人生

打开隐藏二维码