首页 >

织梦DedeCMS缓存原理分析

织梦DedeCMS程序里面,有很多的地方都用到了缓存。
在织梦DedeCMS里面,不但存在模板缓存,重要数据的文件缓存。而且还引入了memcache缓存。首先看织梦DedeCMS的cache.helper.php,这个文件里面的函数主要有三个。 SetCache(),GetCache(),DelCache()三个关于DedeCMS缓存的操作函数。
织梦DedeCMS缓存主要存在文件缓存和memcache缓存两种。当后台配置了memcache服务器信息的时候。DedeCMS cache他会优先的选择使用memcache来缓存,如果不存在memcache服务器配置信息。那么将起用DedeCMS的文件缓存方式。

织梦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 = “\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整套缓存体系。


织梦DedeCMS缓存原理分析
  • 织梦DedeCMS如何把后台的图集编辑器修改为文章编辑器的步骤
  • 织梦DedeCMS如何把后台的图集编辑器修改为文章编辑器的步骤 | 织梦DedeCMS如何把后台的图集编辑器修改为文章编辑器的步骤 ...

    织梦DedeCMS缓存原理分析
  • 织梦DedeCMS怎么去掉导航链接里边的"index.html"
  • 织梦DedeCMS怎么去掉导航链接里边的"index.html" | 织梦DedeCMS怎么去掉导航链接里边的"index.html" ...

    织梦DedeCMS缓存原理分析
  • 织梦DedeCMS短消息与发送到指定邮箱功能开发
  • 织梦DedeCMS短消息与发送到指定邮箱功能开发 | 织梦DedeCMS短消息与发送到指定邮箱功能开发 ...