实战给AW_Blog插件添加缓存(续)

简介:

两年前的文章(实战给AW_Blog插件添加缓存)描述了一个Block Cache的实例,最近发现代码其实写的有点累赘,后台保存时自动触发刷新缓存并不需要自己去写刷新的动作,系统原生的Model继承类Mage_Core_Model_Abstract里已经有实现这个动作的代码,只需要简单的配置下变量就能实现。修改后的方案如下(Block类的所需修改代码不变)

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

    const CACHE_TAG       = 'aw_blog';
    protected $_cacheTag         = 'aw_blog';

结束,就这么简单,打开Mage_Core_Model_Abstract文件来看下为什么

    protected function _afterSave()
    {
        $this->cleanModelCache();
        Mage::dispatchEvent('model_save_after', array('object'=>$this));
        Mage::dispatchEvent($this->_eventPrefix.'_save_after', $this->_getEventData());
        return $this;
    }

    public function cleanModelCache()
    {
        $tags = $this->getCacheTags();
 
        if ($tags !== false) {
            Mage::app()->cleanCache($tags);
        }
        return $this;
    }

    public function getCacheTags()
    {
        $tags = false;
        if ($this->_cacheTag) {
            if ($this->_cacheTag === true) {
                $tags = array();
            } else {
                if (is_array($this->_cacheTag)) {
                    $tags = $this->_cacheTag;
                } else {
                    $tags = array($this->_cacheTag);
                }
                $idTags = $this->getCacheIdTags();
                if ($idTags) {
                    $tags = array_merge($tags, $idTags);
                }
            }
        }
        return $tags;
    }


从上往下依次看,当Model对象保存完毕时会触发cleanModelCache,cleanModelCache里去根据getCacheTags返回的值去定向刷新tags针对的cache,这样,之前定义的变量$_cacheTag的值所对应的cache就被成功刷新了。如果代码看的不是很明白的话,可以把getCacheTags的返回值输出来看下

2013-10-27T14:02:59+00:00 DEBUG (7): Array
(
    [0] => aw_blog
    [1] => aw_blog_2
)

数组里的两个元素就是刷新缓存时所指定的cache tag


目录
相关文章
|
3月前
|
缓存 安全 Android开发
Android经典实战之用Kotlin泛型实现键值对缓存
本文介绍了Kotlin中泛型的基础知识与实际应用。泛型能提升代码的重用性、类型安全及可读性。文中详细解释了泛型的基本语法、泛型函数、泛型约束以及协变和逆变的概念,并通过一个数据缓存系统的实例展示了泛型的强大功能。
41 2
|
19天前
|
缓存 弹性计算 应用服务中间件
如何使用 Wordpress?托管, 网站, 插件, 缓存
如何使用 Wordpress?托管, 网站, 插件, 缓存
|
3月前
|
缓存 NoSQL 数据库
go-zero微服务实战系列(五、缓存代码怎么写)
go-zero微服务实战系列(五、缓存代码怎么写)
|
4月前
|
缓存 NoSQL Serverless
函数计算产品使用问题之如何使用Redis作为缓存插件
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
108 8
|
3月前
|
缓存 NoSQL Java
惊!Spring Boot遇上Redis,竟开启了一场缓存实战的革命!
【8月更文挑战第29天】在互联网时代,数据的高速读写至关重要。Spring Boot凭借简洁高效的特点广受开发者喜爱,而Redis作为高性能内存数据库,在缓存和消息队列领域表现出色。本文通过电商平台商品推荐系统的实战案例,详细介绍如何在Spring Boot项目中整合Redis,提升系统响应速度和用户体验。
59 0
|
3月前
|
消息中间件 缓存 监控
go-zero微服务实战系列(六、缓存一致性保证)
go-zero微服务实战系列(六、缓存一致性保证)
|
4月前
|
缓存
如何彻底卸载VSCode及其原来的插件配置缓存
如何彻底卸载VSCode及其原来的插件配置缓存
413 0
|
5月前
|
SQL 缓存 Java
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
|
25天前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
60 1
|
25天前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
37 2
数据的存储--Redis缓存存储(二)