phpcms v9中使用memcache
2014-06-20 08:00:28   来源:   评论:0 点击: 收藏

phpcms v9强大倒是一说,一些内置的缓存配置方法却没有明确的教程,比如memcache类。phpcms已经内置了这个缓存,但一直不知道如何启用。折...
phpcms v9强大倒是一说,一些内置的缓存配置方法却没有明确的教程,比如memcache类。

phpcms已经内置了这个缓存,但一直不知道如何启用。

折腾了一晚,想把phpcms的setcache和getcache方法,配置成可以动态切换缓存类型,类型于ThinkPHP的机制。

最后无奈发现phpcms默认开发好像全是使用文件进行存储。
于是,只能在自己需要的地方加上memcache或者redis了,内核要改的话,也忒麻烦了。

配置文件:
cache/configs/cache.php

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
 
return array (
    'file1' => array (
        'type' => 'file',
        'debug' => true,
        'pconnect' => 0,
        'autoconnect' => 0
        ),
    'memcache' => array (
        'hostname' => '192.168.0.106',
        'port' => 11211,
        'timeout' => 3600,
        'type' => 'memcache',
        'debug' => true,
        'pconnect' => 0,
        'autoconnect' => 0
    ),
    'redis' => array (
        'hostname' => '192.168.0.106',
        'port' => 6379,
        'timeout' => 0,
        'type' => 'redis',
        'debug' => true,
        'pconnect' => 0,
        'autoconnect' => 0
    )
);
 
?>

文件配置文件的格式上看,和TP机乎一样,但不支持动态切换。

在需要的地方这样写,这里封装了一个获取记录的方法:

01
02
03
04
05
06
07
08
09
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
/**
 * 调用一个应用详情
 */
function appdetail($appid, $ttl=0)
{
    if(FALSE == is_int($appid)) return FALSE;
        
    $cache_type = 'memcache';
    $cache_name = sprintf(&quot;app_detail_id_%d&quot;, $appid);
 
    $cache_config = pc_base::load_config('cache');
    
    /* 系统是否支持 */
    $cache_support = !empty($cache_config[$cache_type]) &amp;&amp; class_exists($cache_type);
 
    if($cache_support)
    {
        $memcache = cache_factory::get_instance($cache_config)->get_cache('memcache');
        $app = $memcache->get($cache_name);
        $app = unserialize($app);
    }else{
        $app = getcache($cache_name);
    }
    
    if($app === false)
    {
        $db = pc_base::load_model('apps_model');
        $app = $db->get_one(array(&quot;id&quot;=>$appid), &quot;id,name&quot;);
 
        if($cache_support)
        {
            $memcache = cache_factory::get_instance($cache_config)->get_cache('memcache');
            $memcache->set($cache_name, serialize($app), $ttl);
        }else{
            setcache($cache_name, $app, '', $ttl);
        }
    }
 
    return $app;
}

大约的功能是检测系统是否支持memcache类,支持的话就直接使用memcache,如果不支持,就使用PHPCMS自带的缓存方法。

继续深入折腾setcache,看看是不是我的理解有误

周末在家折腾了一天,慢慢把PHPCMS的MVC和模板标签pc_tag给做熟了,可以肯定的下结论就是:
PHPCMS会把所有进入模板层的数据,进行数据缓存,比如content_tag.class.php中所有的方法,产生的数据还是会被再一次缓存到文件中。

我使用A机产生memcache的数据memcache_A1,使用PHPCMS调用A1以后,会在PHPCMS硬盘上产生PHPCMS_A1,当我的memcache_A1发生改变时,PHPCMS_A1读取的还是PHPCMS_A1这个缓存。
解决方是在pc_tag中,将缓存设置为0,则可以在后端使用其它缓存工具!


相关热词搜索:phpcms v9 memcache

上一篇:Linux终端下 dstat 监控工具
下一篇:PhpCms系统设置:config.inc.php文件配置说明