实战给AW_Blog插件添加缓存

简介:

            aheadworks公司的Blog插件可以算是Magento所有免费插件中最有名也是使用最广泛的一个插件了,就我自己来说,也是每个项目的必备插件(我一般用来做为新闻插件使用)。今天拿它做例子演示下给Block添加缓存(Cache)。

    

   这个截图是我某个项目使用aw_blog插件的实例,使用AW_Blog_Block_Blog这个block文件在首页输出某个新闻类别下的新闻列表,aw_blog插件本身是没给输出内容做过缓存处理的,也就是说,即便你一天或几天才更新一次新闻,页面每次载入时依然要从数据库里把这些数据取一遍,这个是比较没必要的。

下面来给这个Block加上缓存,Magento本身已经提供了一套给Block添加缓存的写法,只需要简单的加几句代码就可以

protected function _construct()
    {
        $this->addData(array(
            'cache_lifetime'=> 86400,
            'cache_tags'    => array(AW_Blog_Model_Post::CACHE_TAG)
        ));
}

其中cache_lifetime指缓存周期,这里我设置的是86400秒,也就是一天,cache_tags指给该缓存设定的标签,这里我设置的是post这个model的一个常量。做完这一步,这个block文件的缓存就好了,页面载入时,这块内容不会再每次去数据库取数据,而是直接载入缓存好的html,减少了页面载入所消耗的时间。

到这一步,整个工作才完成了一半,为什么这么说呢?这里可以做个实验,在加完以上的代码并刷新过一次页面后,数据已经写进缓存文件里了,这时候去后台新增或修改一篇新闻,你会发现前台页面的内容并没有跟着改变,而是维持之前的内容。那么什么时候才会变成新的内容呢,一天之后,因为之前给缓存设置的有效时间是一天,一天之内的有效期内,页面都会去读取缓存文件而不是数据库。这时候你可以这样处理,在后台修改过内容后,手动刷新后台的缓存,让效果实时可见,或者用更好的方案,通过程序控制,在每次新闻内容新增或修改时自动刷新对应的缓存。

打开AW_Blog_Model_Post这个文件,在头部定义一个常量

const CACHE_TAG       = 'aw_blog';

底部添加如下代码

  public function cleanCache()
    {
        Mage::app()->cleanCache(self::CACHE_TAG);
        return $this;
    }
    
    	public function _beforeSave(){
      $this->cleanCache();

		return parent::_beforeSave();
	}

常量即是之前给Blog添加的缓存的cache_tags,_beforeSave函数是所有Model类继承自父类的方法,可以在该Model对应的对象实体保存数据时触发,这里重写_beforeSave,去调用一个cleanCache函数,cleanCache函数里只有一句重要的代码,就是Mage::app()->cleanCache(self::CACHE_TAG),这个方法可以清除指定标签(tag)的缓存,比如这里,它只会清除tag为aw_blog的缓存,而不是全部系统缓存。

从完整的流程来说,首先前台页面第一次载入时,该Block会将内容缓存进缓存文件,然后当后台保存新闻时,通过cleanCache会清除指定Tag的缓存,这之后再次载入页面时就会生成新的缓存文件。这样就做到了缓存新闻内容以提高速度的同时,依然可以在后台做出数据改变时在页面实时显示新的数据。

新闻数据在页面上一般所占空间不大,即使缓存起来可能也不会对加载速度有很明显的提升,这里只是以此为例子展示下Magento所提供的Block缓存机制。这个例子很简单,如果要对其他东西做缓存可能会有各种更复杂的流程,这里不再探讨。

PS:本文的前提是你在后台已经把Magento的缓存打开了得意

参考文章:http://www.magentocommerce.com/wiki/5_-_modules_and_development/block_cache_and_html_ouput

     

目录
相关文章
|
18天前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
108 1
Redis专题-实战篇二-商户查询缓存
|
3月前
|
存储 缓存 安全
Go语言实战案例-LRU缓存机制模拟
本文介绍了使用Go语言实现LRU缓存机制的方法。LRU(最近最少使用)是一种常见缓存淘汰策略,当缓存满时,优先删除最近最少使用的数据。实现中使用哈希表和双向链表结合的方式,确保Get和Put操作均在O(1)时间内完成。适用于Web缓存、数据库查询优化等场景。
|
7月前
|
缓存 NoSQL 关系型数据库
WordPress数据库查询缓存插件
这款插件通过将MySQL查询结果缓存至文件、Redis或Memcached,加速页面加载。它专为未登录用户优化,支持跨页面缓存,不影响其他功能,且可与其他缓存插件兼容。相比传统页面缓存,它仅缓存数据库查询结果,保留动态功能如阅读量更新。提供三种缓存方式选择,有效提升网站性能。
113 1
|
9月前
|
存储 缓存 Java
Java中的分布式缓存与Memcached集成实战
通过在Java项目中集成Memcached,可以显著提升系统的性能和响应速度。合理的缓存策略、分布式架构设计和异常处理机制是实现高效缓存的关键。希望本文提供的实战示例和优化建议能够帮助开发者更好地应用Memcached,实现高性能的分布式缓存解决方案。
159 9
|
11月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
12月前
|
缓存 弹性计算 应用服务中间件
如何使用 Wordpress?托管, 网站, 插件, 缓存
如何使用 Wordpress?托管, 网站, 插件, 缓存
|
缓存 NoSQL Java
惊!Spring Boot遇上Redis,竟开启了一场缓存实战的革命!
【8月更文挑战第29天】在互联网时代,数据的高速读写至关重要。Spring Boot凭借简洁高效的特点广受开发者喜爱,而Redis作为高性能内存数据库,在缓存和消息队列领域表现出色。本文通过电商平台商品推荐系统的实战案例,详细介绍如何在Spring Boot项目中整合Redis,提升系统响应速度和用户体验。
166 0
|
消息中间件 缓存 监控
go-zero微服务实战系列(六、缓存一致性保证)
go-zero微服务实战系列(六、缓存一致性保证)
|
5月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
5月前
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
731 0