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("app_detail_id_%d", $appid ); $cache_config = pc_base::load_config( 'cache' ); /* 系统是否支持 */ $cache_support = ! empty ( $cache_config [ $cache_type ]) && 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 ("id"=> $appid ), "id,name"); 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,则可以在后端使用其它缓存工具!