POST TIME:2017-11-30 16:58
dedecms程序里面,有很多的地方都用到了緩存。在dedecms里面,不但存在模板緩存,重要數據的文件緩存。而且還引入了memcache緩存。首先我們看dedecms的cache.helper.php,這個文件里面的函數主要有三個。 SetCache(),GetCache(),DelCache()三個關于dedecms緩存的操作函數。dedecms緩存主要存在文件緩存和memcache緩存兩種。當后臺配置了memcache服務器信息的時候。dedecms cache他會優先的選擇使用memcache來緩存,如果不存在memcache服務器配置信息。那么將起用dedecms的文件緩存方式。
首先我們看dedecms的SetCache()。很簡單, function SetCache($prefix, $key, $value, $timeout = 3600, $is_memcache = TRUE),我們先看這條,他就是通過使用key/value的方式來設置dedecms的緩存,而$prefix更多的是前綴,而$key就是通過對md5($sql)的一串字符串獲取的。通過分析我們可以看出
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, 2 ) . '/' . substr ( $key, 2, 2 ) . '/' . substr ( $key, 4, 2 ) . '/' . $key;
$tmp ['data'] = $value;
$tmp ['timeout'] = time () + ( int ) $timeout;
$cache_data = "<?php exit('dedecms');?>\n\r".@serialize ( $tmp );
return @PutFile ( DEDEDATA . "/cache/$prefix/$key.php", $cache_data);
在這里我們可以很清楚的認識到。如果dedecms應該說是結合的文件和memcache緩存兩種方式的,為了防止緩存文件被盜用,我們可以在緩存文件的前頭增加exit字符。當你需要使用的時候,完全可以替換掉,當正常的變量還原。
而dedecms緩存的key和緩存文件目錄的生成,是通過對md5($key)后的值取某幾個字符來做文件夾生成目錄的。這樣的好處是避免了很多緩存文件在指定的某幾個緩存目錄里面,造成緩存負荷太大,而影響緩存。
而取的dedecms的緩存的方式主要以下方式 function GetCache($prefix, $key, $is_memcache = TRUE)
我們可以分析出,當$key=md5($key)之后,先去memcache中取得,如果不存在,那么才考慮去dedecms的文件緩存中獲取。
而dedecms刪除緩存也一樣, function DelCache($prefix, $key, $is_memcache = TRUE)先刪除memcache中的。如果他不存在。將直接在dedecms文件緩存中刪除,最終完成dedecms整套緩存體系。