首页 > 文章 > 杂文

phpcms v9中使用memcache
时间:2014-06-20 08:00:28  点击: 来源:  作者:

phpcms v9强大倒是一说,一些内置的缓存配置方法却没有明确的教程,比如memcache类。

phpcms已经内置了这个缓存,但一直不知道如何启用。折腾了一晚,想把phpcms的setcache和getcache方法,配置成可以动态切换缓存类型 ...

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,则可以在后端使用其它缓存工具!


”您可通过以下微信二维码,赞赏作者“
 
 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
linux服务器同步互联网时间
linux服务器同步互联
亚马逊云lightsail服务器使用教程 | 亚马逊云lightsail使用指南
亚马逊云lightsail服
hostdare 4折优惠,直接降价60% 美国洛杉矶低至 $10.4/年 768M内存/1核/10gNVMe/500g流量
hostdare 4折优惠,直接
六类网线cat6a和cat6e的区别
六类网线cat6a和cat6e
相关文章
栏目更新
栏目热门

关于我们 | 广告服务 | 联系我们 | 网站地图 | 免责声明 | WAP | RSS


Copyright © 运维之家 2013-2023