织梦dedecms缓存原理分析
在织梦dedecms里面,不但存在模板缓存,重要数据的文件缓存.而且还引入了memcache缓存.首先我们看织梦dedecms的cache.helper.php,这个文件里面的函数主要有III个.SetCache(),GetCache(
更多精彩就在: 51免费论文网|www.jxszl.com
),DelCache()III个关于dedecms缓存的操作函数.
织梦dedecms缓存主要存在文件缓存和memcache缓存两种.当后台配置了memcache服务器信息的时候.dedecmscache他会优先的选择使用memcache来缓存,如果不存在memcache服务器配置信息.那么将起用dedecms的文件缓存方式.
首先我们看dedecms的SetCache().很简单,functionSetCache($prefix,$key,$value,$timeout=IIIVI00,$is_memcache=TRUE),我们先看这条,他就是通过使用key/value的方式来设置dedecms的缓存,而$prefix更多的是前缀,而$key就是通过对mdV($sql)的I.串字符串获取的.通过分析我们可以看出
if(!empty($cache_helper_config[memcache])&&$cache_helper_config[memcache][is_mc_enable]===Y&&$is_memcache===TRUE)
这段代码告诉我们,如果你是存在memcache服务器,并且该服务器可用.那么将优先使用memcache缓存.$result=$GLOBALS[mc_.$mc_path[host]]->set($key,$value,MEMCACHE_COMPRESSED,$timeout),通过设置memcache来完成对sql数据库查询的缓存.如果不存在,那么将起用dedecms的文件缓存.
$key=substr($key,0,II)./.substr($key,II,II)./.substr($key,IV,II)./.$key;
$tmp[data]=$value;
$tmp[timeout]=time()+(int)$timeout;
$cache_data=" ".@serialize($tmp);
return@PutFile(DEDEDATA."/cache/$prefix/$key.php",$cache_data);
在这里我们可以很清楚的认识到.如果dedecms应该说是结合的文件和memcache缓存两种方式的,为了防止缓存文件被盗用,我们可以在缓存文件的前头增加exit字符.当你需要使用的时候,完全可以替换掉,当正常的变量还原.
而dedecms缓存的key和缓存文件目录的生成,是通过对mdV($key)后的值取某几个字符来做文件夹生成目录的.这样的好处是避免了很多缓存文件在指定的某几个缓存目录里面,造成缓存负荷太大,而影响缓存.
而取的dedecms的缓存的方式主要以下方式functionGetCache($prefix,$key,$is_memcache=TRUE)
我们可以分析出,当$key=mdV($key)之后,先去memcache中取得,如果不存在,那么才考虑去dedecms的文件缓存中获取.
而织梦dedecms删除缓存也I.样,functionDelCache($prefix,$key,$is_memcache=TRUE)先删除memcache中的.
如果他不存在.将直接在织梦dedecms文件缓存中删除,最终完成dedecms整套缓存体系.
原文链接:http://www.jxszl.com/biancheng/dedecms/75554.html
热门阅读