2011-12-01 21:18:49 +00:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\HttpKernel\Profiler ;
use Memcached ;
/**
* Memcached Profiler Storage
*
* @ author Andrej Hudec < pulzarraider @ gmail . com >
*/
class MemcachedProfilerStorage extends BaseMemcacheProfilerStorage
{
/**
* @ var Memcached
*/
private $memcached ;
/**
* Internal convenience method that returns the instance of the Memcached
*
* @ return Memcached
2012-12-16 12:02:54 +00:00
*
* @ throws \RuntimeException
2011-12-01 21:18:49 +00:00
*/
protected function getMemcached ()
{
if ( null === $this -> memcached ) {
2012-03-04 18:43:39 +00:00
if ( ! preg_match ( '#^memcached://(?(?=\[.*\])\[(.*)\]|(.*)):(.*)$#' , $this -> dsn , $matches )) {
throw new \RuntimeException ( sprintf ( 'Please check your configuration. You are trying to use Memcached with an invalid dsn "%s". The expected format is "memcached://[host]:port".' , $this -> dsn ));
2011-12-01 21:18:49 +00:00
}
2012-03-04 18:43:39 +00:00
$host = $matches [ 1 ] ? : $matches [ 2 ];
$port = $matches [ 3 ];
2011-12-01 21:18:49 +00:00
$memcached = new Memcached ;
//disable compression to allow appending
$memcached -> setOption ( Memcached :: OPT_COMPRESSION , false );
$memcached -> addServer ( $host , $port );
$this -> memcached = $memcached ;
}
return $this -> memcached ;
}
2012-04-29 00:33:14 +01:00
/**
* Set instance of the Memcached
*
* @ param Memcached $memcached
*/
public function setMemcached ( $memcached )
{
$this -> memcached = $memcached ;
}
2011-12-01 21:18:49 +00:00
/**
* { @ inheritdoc }
*/
protected function getValue ( $key )
{
return $this -> getMemcached () -> get ( $key );
}
/**
* { @ inheritdoc }
*/
protected function setValue ( $key , $value , $expiration = 0 )
{
2012-02-23 18:15:05 +00:00
return $this -> getMemcached () -> set ( $key , $value , time () + $expiration );
2011-12-01 21:18:49 +00:00
}
/**
* { @ inheritdoc }
*/
2012-04-27 21:40:33 +01:00
protected function delete ( $key )
2011-12-01 21:18:49 +00:00
{
2012-04-27 21:40:33 +01:00
return $this -> getMemcached () -> delete ( $key );
2011-12-01 21:18:49 +00:00
}
/**
* { @ inheritdoc }
*/
protected function appendValue ( $key , $value , $expiration = 0 )
{
$memcached = $this -> getMemcached ();
if ( ! $result = $memcached -> append ( $key , $value )) {
return $memcached -> set ( $key , $value , $expiration );
}
return $result ;
}
}