`
free_bird816
  • 浏览: 206036 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

用memcatche代替smarty的文件缓存 转

阅读更多

smarty可以通过cache_handler_func更改缓存方式,具体例子可以先看看官网:http://www.smarty.net/manual/en/section.template.cache.handler.func.php


官网的例子是用mysql方式,可以修改一下,改为用memcache的方式进行缓存,代码如下:
function memcache_handler($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null, $exp_time=null)
{
$use_gzip = false;
// create unique cache id
$CacheID = md5($tpl_file.$cache_id.$compile_id);
$memcache = new Memcache;
$memcache->addServer('192.168.56.201',11211); //根据你实际的memcache集群设定
$memcache->addServer('192.168.56.202',11211);
$memcache->addServer('192.168.56.203',11211);
$memcache->addServer('192.168.56.204',11211);


switch ($action) {
case 'read':
// get cache from memcache
$getContents = $memcache->get($CacheID);
if(!$getContents) {
$smarty_obj->trigger_error("memcache_handler: get failed.");
}
if($use_gzip && function_exists("gzuncompress")) {
$cache_contents = gzuncompress($getContents);
} else {
$cache_contents = $getContents;
}
$return = $getContents;
break;
case 'write':
// save cache to memcache
if($use_gzip && function_exists("gzcompress")) {
// compress the contents for storage efficiency
$contents = gzcompress($cache_content);
} else {
$contents = $cache_content;
}
$writeContents = $memcache->set($CacheID,$contents);
if(!$writeContents) {
$smarty_obj->trigger_error("memcache_handler: set failed.");
}
$return = $writeContents;
break;
case 'clear':
// clear cache info
if(empty($cache_id) && empty($compile_id) && empty($tpl_file)) {
// clear them all
$clearCache = $memcache->flush();
} else {
$clearCache = $memcache->delete($cache_id);
}
if(!$clearCache) {
$smarty_obj->trigger_error("memcache_handler: clear failed.");
}
$return = $clearCache;
break;
default:
// error, unknown action
$smarty_obj->trigger_error("cache_handler: unknown action \"$action\"");
$return = false;
break;
}


return $return;
}
 
值得注意的是:smarty2.6.x用cache_handler_func后有一个问题,不论是mysql或者是memcache或者是其他等,无论设定lifetime多长,程序每次运行都会更新cache,未达到缓存效果,不知是否smarty的bug,查看了一下smarty的源代码,发现读缓存的那个函数里没有返回缓存内容,因此程序未命中内容,所以会执行写缓存操作,导致每次都更新缓存,解决方法是打开core.read_cache_file.php的37行修改为:
$params['results'] = call_user_func_array($smarty->cache_handler_func,
                             array('read', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id']
分享到:
评论

相关推荐

    smarty两种局部缓存方法和自定义生成静态文件的例子

    2. **使用静态文件缓存**:在模板中,可以使用 `assign` 或 `cached` 指令结合自定义的函数生成静态文件。例如,创建一个名为 `generateStaticPage` 的PHP函数,将缓存内容写入HTML文件。 ```php function ...

    PHP模板引擎Smarty的缓存用法_.docx

    ### 一、开启和使用Smarty缓存 要启用Smarty的缓存功能,首先需要在初始化Smarty对象时设置相关参数。在配置文件或脚本中,可以这样设置: ```php $smarty = new Smarty(); $smarty->caching = true; // 开启缓存 ...

    (第30讲) PHP模板引擎Smarty缓存应用

    使用Smarty缓存时,只需在模板文件中添加`{cache}`标签,例如`{cache id='uniqueCacheId'}...{/cache}`,其中的`id`用于唯一标识缓存。缓存内容会自动保存,并在下一次请求时直接使用,无需重新生成。清除缓存可以...

    php模板解析类文件缓存

    文件缓存是Smarty性能优化的关键。Smarty提供了两种类型的缓存:编译缓存和显示缓存。 - **编译缓存**:如上所述,模板会被编译成PHP代码并存储,下次请求时直接执行。这个过程大大减少了解析模板的时间。 - **显示...

    SMarty 3 文件包

    使用这个文件包,你可以按照以下步骤搭建Smarty 3 环境: 1. 将整个文件包上传到你的服务器或本地开发环境中。 2. 配置 Smarty,包括设置模板目录、编译目录、缓存目录等。 3. 创建PHP文件,实例化Smarty对象,并向...

    PHP100视频教程 30:PHP模板引擎Smarty缓存应用

     //缓存时间2、Smarty缓存的使用和清除 $smarty->display('cache.tpl', cache_id); //创建带ID的缓存 $smarty->clear_all_cache(); //清除所有缓存 $smarty->clear_cache('index.htm'); //清除index.tpl的缓存...

    smarty缓存部分参考

    `,其中`$cache_id`用于标识不同的缓存实例,确保即使在同一个模板文件的不同请求间也能使用不同的缓存数据。 #### 二、清除缓存 有时候需要手动清除缓存,例如当数据更新时或者想要刷新显示内容时。Smarty提供了...

    smarty文件包

    6. **配置管理**:Smarty允许开发者通过配置文件来设置各种参数,如模板目录、编译目录、缓存目录等,使得项目的配置更加灵活。 7. **安全控制**:为了防止模板被恶意篡改,Smarty提供了安全模式,可以限制模板中...

    PHP100视频教程 30:PHP模板引擎Smarty缓存应用.rar

    2、Smarty缓存的使用和清除  $smarty->display('cache.tpl', cache_id); //创建带ID的缓存  $smarty->clear_all_cache(); //清除所有缓存  $smarty->clear_cache('index.htm'); //清除index.tpl的缓存  $...

    Smarty局部缓存的几种方法简介

    这时,Smarty提供了局部缓存功能,允许我们对特定部分的内容进行非缓存处理。以下是对Smarty局部缓存的三种方法的详细解释: 1. **Insert法** 使用Insert函数可以避免某部分模板内容被缓存。首先,我们需要在PHP...

    PHP100视频教程30:PHP模板引擎Smarty缓存应用.rar

    描述中的“.rar”文件可能包含了PPT演示文稿和视频教程,其中`第30讲.ppt`可能是关于Smarty缓存的详细讲解,包括原理、配置、使用方法和最佳实践;`php100-30.wmv`则可能是一个视频教程,通过实例演示如何在实际项目...

    Smarty_smarty_

    1. **基本语法**:Smarty的语法设计简洁明了,它允许在模板文件中使用花括号`{}`包裹PHP语句。例如,`{$variable}`用于输出变量,`{foreach $array as $item}`用于循环遍历数组。 2. **变量**:Smarty中的变量可以...

    smarty缓存用法分析

    首先,要使用Smarty的缓存功能,需要开启缓存。这可以通过设置Smarty对象的$caching属性为true来实现。示例代码如下: ```php $Smarty->caching = true; ``` 一旦开启了缓存,就可以通过设置cache_lifetime属性来...

    李炎恢Smarty专题精讲视频课程源码

    - **缓存管理**:理解Smarty的缓存机制,包括何时启用缓存,如何清除缓存,以及自定义缓存策略。 - **实际项目应用**:通过实践项目,将学到的理论知识应用于实际开发,提高解决问题的能力。 "Smarty0.1"这个文件...

    PHP文件缓存smarty模板应用实例分析

    本文将深入探讨PHP文件缓存与Smarty模板的应用,通过实例分析来展示其相关使用技巧。 首先,要使用Smarty模板的缓存功能,开发者需要在初始化Smarty对象后,设置caching属性为true,并指定cache_dir属性来设定缓存...

    Smarty+smarty中文手册

    .tar.gz格式是一种常见的Linux/Unix下的文件打包和压缩方式,它首先将所有文件打包成.tar文件,然后用gzip工具进行压缩,以减小文件大小便于传输和存储。解压这个文件,你可以获得Smarty的源代码,包括类库、配置...

    smarty模板中文手册

    3. 缓存技术:Smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页,当设定Smarty的cache属性为true时,在Smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来...

    smarty

    3. **缓存机制**:Smarty支持缓存技术,可以将最终的HTML页面存储为静态文件,当设置缓存开启时,用户请求在缓存有效期内直接返回静态HTML,进一步提高了响应速度。 4. **插件扩展**:Smarty允许开发者自定义插件,...

    smarty中文使用手册

    本手册是Smarty的中文使用指南,旨在帮助中文用户更好地理解和应用Smarty框架。 1. **Smarty简介** Smarty是一个基于PHP的模板系统,它引入了MVC(Model-View-Controller)设计模式,允许开发者将PHP代码和HTML...

    springmvc4+smarty4j 实例

    3. 创建Spring MVC配置类:使用Java配置代替XML配置,定义RequestMappingHandlerMapping、RequestMappingHandlerAdapter等关键组件。 4. 模型-视图-控制器(MVC)设计模式:创建Controller类,定义处理HTTP请求的...

Global site tag (gtag.js) - Google Analytics