前言:    

    如果你使用Symfony2框架做项目,那么可能你需要缓存一些数据;说到缓存,方法却是很多,从数据库到文件到内存,再分N种缓存技术,比如php自带的file_put_contents(文件缓存),以及最常见的memcached、APC、redis(内存缓存)等等。

    选择哪一种缓存:

    确实任何一种缓存技术都可能将你的程序提高许多速度,然而选择哪一种缓存得根据你项目的实际情况来看。对于点击量大的建议使用memcached、APC、redis等工具来缓存,因为他们的结构分明,读取更快;对于变化不大,经常从一台服务器取另一台服务器的内容时(比如读取API数据),选择简单的文件缓存也能比拟工具的速度。

    Symfony2 file cache:

    无需任何配置,只需要在你需要操作的controller文件上方引用Filesystem和IOException即可

    

  use Symfony\Component\Filesystem\Filesystem;  use Symfony\Component\Filesystem\Exception\IOException;

DefultControll.php

  
mkdir(dirname($filename));   } catch (IOException $e) {        return false;   }   //整合数据   $time = time();   $cache = array();   $cache['contents'] = $date;   $cache['pertime']   = $pertime === 0 ? 0 : $time + $pertime;   $cache['mtime']    = $time;   $res = serialize($cache);   //写下你的文件   $result = false;       $f = @fopen($filename, 'w');          if ($f) {              @flock($f, LOCK_EX);              fseek($f, 0);              ftruncate($f, 0);              $tmp = @fwrite($f, $res);              if (!($tmp === false)) {                   $result = true;              }              @fclose($f);          }       @chmod($filename,0777);       return $result;   }      /**     * @清除缓存文件     */    private function clearFile($filename)    {     if(!file_exists($filename)){     return false;     }else{     //删除缓存文件     return unlink($filename);     }    }      /**     * @调用缓存的方法     * @Route("/file")     * @Template()     */    public function fileAction()    {            $name = 'multiDepot';        //这里传入需要缓存的数据     $date = ['id'=>1,'name'=>'小军'];     //设置的缓存时间 $pertime = 10; $newTime = time(); //设置缓存路径     $filename = $this->container->getParameter('kernel.cache_dir') . ''.$name.'.txt';     //如果存在缓存文件,取缓存文件内容     if(file_exists($filename)){     //阅读你的文件的内容 $res = unserialize(file_get_contents($filename)); //如果文件已经过期,重新缓存文件 if($res['mtime'] - $newTime < $pertime){ $this->clearFile($filename); $this->cacheFile($filename, $date, $pertime); } //这里需要判断当前数据是否有更新,有更新则从接口取数据,重新种缓存 //if(true){ // clearFile($filename); // $this->cacheFile( $filename, $date, $pertime ); //}     }else{     //不存在则缓存文件      $this->cacheFile($filename, $date);     }

    OK,非常简单就实现了Symfony2的文件缓存,缓存的文件在 D:\wamp\www\abc\branches\dev\app\ cache\dev 文件夹下。

    这里需要注意的是interfere文件夹需要自己手动创建,在服务器上的话还需要设置权限为可写、可读。