最模板 - 外贸网站建设,外贸网站模板

最模板

当前位置: 首页 > Magento > Magento教程 >

Magento缓存与全局配置文件缓存(6)

时间:2014-06-02 07:38来源:未知 作者:最模板zuimoban 点击:
这里先开个小差,哪些东西可以设置缓存,后台可以指定: 这些设置保存到表core_cache_option中: 实际canUse就是返回对应的value值,1表示使用缓存,0表示不

这里先开个小差,哪些东西可以设置缓存,后台可以指定:
Magento缓存管理

这些设置保存到表core_cache_option中:
Magento缓存配置表
实际canUse就是返回对应的value值,1表示使用缓存,0表示不使用。另外,还有core_cache和core_cache_tag这两个表和core_cache_option没有任何干系,它们是使用数据库缓存时保存缓存数据的地方。

回到saveCache方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//Mage_Core_Model_Config
    public function saveCache($tags=array())
    {
        if (!Mage::app()->useCache('config')) {
            return $this;
        }
    //为缓存打标签  保存的时候可以打标签
        if (!in_array(self::CACHE_TAG, $tags)) {
            $tags[] = self::CACHE_TAG;
        }
    // Config对象在构造函数中$this->setCacheId('config_global');设置了ID
    // 这里获取config_global.lock,如果能load进来,直接就返回了,说明在上锁
        $cacheLockId = $this->_getCacheLockId();
        if ($this->_loadCache($cacheLockId)) {
            return $this;
        }
/*
$_cacheSections = array(
        'admin'     => 0,
        'adminhtml' => 0,
        'crontab'   => 0,
        'install'   => 0,
        'stores'    => 1,
        'websites'  => 0
    );
*/
        if (!empty($this->_cacheSections)) {
            $xml = clone $this->_xml;
        //根据_cacheSections数组把全局配置文件拆分
            foreach ($this->_cacheSections as $sectionName => $level) {
                $this->_saveSectionCache($this->getCacheId(), $sectionName, $xml, $level, $tags);
                unset($xml->$sectionName);
            }
        // config_global 是被剥离后剩余部分
            $this->_cachePartsForSave[$this->getCacheId()] = $xml->asNiceXml('', false);
        } else {
            return parent::saveCache($tags);
        }
 
        $this->_saveCache(time(), $cacheLockId, array(), 60); //上锁
        //移除打了CONFIG标签的cache(全部配置相关的缓存,全部打了这个标志,默认)
        $this->removeCache();
        foreach ($this->_cachePartsForSave as $cacheId => $cacheData) {
            $this->_saveCache($cacheData, $cacheId, $tags, $this->getCacheLifetime());
/*
    protected function _saveCache($data, $id, $tags=array(), $lifetime=false)
    {
        return Mage::app()->saveCache($data, $id, $tags, $lifetime);
    }
*/
        }
        unset($this->_cachePartsForSave);
        $this->_removeCache($cacheLockId); //解锁
        return $this;
}
 
    protected function _saveSectionCache($idPrefix, $sectionName, $source, $recursionLevel=0, $tags=array())
    {
        if ($source && $source->$sectionName) {
            // config_global_admin config_global_websites
            $cacheId = $idPrefix . '_' . $sectionName;
            if ($recursionLevel > 0) {
                foreach ($source->$sectionName->children() as $subSectionName => $node) {
                    $this->_saveSectionCache(
                        $cacheId, $subSectionName, $source->$sectionName, $recursionLevel-1, $tags
                    );
                }
            }
            //部分保存的XML
            $this->_cachePartsForSave[$cacheId] = $source->$sectionName->asNiceXml('', false);
        }
        return $this;
    }
(责任编辑:最模板)
------分隔线----------------------------
栏目列表
推荐内容