phpcms v9中使用memcache

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

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

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

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

<?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机乎一样,但不支持动态切换。

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

/**
 * 调用一个应用详情
 */
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》有1个想法

发表评论

电子邮件地址不会被公开。