2015-08-17 17:00:26 -07:00
< ? php
/*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* " AS IS " AND ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT
* LIMITED TO , THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT , INCIDENTAL ,
* SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT NOT
* LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE ,
* DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
* ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the MIT license . For more information , see
* < http :// www . doctrine - project . org >.
*/
namespace Doctrine\Common\Cache ;
use Redis ;
/**
* Redis cache provider .
*
* @ link www . doctrine - project . org
* @ since 2.2
* @ author Osman Ungur < osmanungur @ gmail . com >
*/
class RedisCache extends CacheProvider
{
/**
* @ var Redis | null
*/
private $redis ;
/**
* Sets the redis instance to use .
*
* @ param Redis $redis
*
* @ return void
*/
public function setRedis ( Redis $redis )
{
$redis -> setOption ( Redis :: OPT_SERIALIZER , $this -> getSerializerValue ());
$this -> redis = $redis ;
}
/**
* Gets the redis instance used by the cache .
*
* @ return Redis | null
*/
public function getRedis ()
{
return $this -> redis ;
}
/**
* { @ inheritdoc }
*/
protected function doFetch ( $id )
{
return $this -> redis -> get ( $id );
}
2015-10-08 11:40:12 -07:00
/**
* { @ inheritdoc }
*/
protected function doFetchMultiple ( array $keys )
{
return array_filter ( array_combine ( $keys , $this -> redis -> mget ( $keys )));
}
2015-08-17 17:00:26 -07:00
/**
* { @ inheritdoc }
*/
protected function doContains ( $id )
{
return $this -> redis -> exists ( $id );
}
/**
* { @ inheritdoc }
*/
protected function doSave ( $id , $data , $lifeTime = 0 )
{
if ( $lifeTime > 0 ) {
return $this -> redis -> setex ( $id , $lifeTime , $data );
}
return $this -> redis -> set ( $id , $data );
}
/**
* { @ inheritdoc }
*/
protected function doDelete ( $id )
{
return $this -> redis -> delete ( $id ) > 0 ;
}
/**
* { @ inheritdoc }
*/
protected function doFlush ()
{
return $this -> redis -> flushDB ();
}
/**
* { @ inheritdoc }
*/
protected function doGetStats ()
{
$info = $this -> redis -> info ();
return array (
2015-10-08 11:40:12 -07:00
Cache :: STATS_HITS => $info [ 'keyspace_hits' ],
Cache :: STATS_MISSES => $info [ 'keyspace_misses' ],
2015-08-17 17:00:26 -07:00
Cache :: STATS_UPTIME => $info [ 'uptime_in_seconds' ],
Cache :: STATS_MEMORY_USAGE => $info [ 'used_memory' ],
Cache :: STATS_MEMORY_AVAILABLE => false
);
}
/**
* Returns the serializer constant to use . If Redis is compiled with
* igbinary support , that is used . Otherwise the default PHP serializer is
* used .
*
* @ return integer One of the Redis :: SERIALIZER_ * constants
*/
protected function getSerializerValue ()
{
2015-10-08 11:40:12 -07:00
if ( defined ( 'HHVM_VERSION' )) {
return Redis :: SERIALIZER_PHP ;
}
2015-08-17 17:00:26 -07:00
return defined ( 'Redis::SERIALIZER_IGBINARY' ) ? Redis :: SERIALIZER_IGBINARY : Redis :: SERIALIZER_PHP ;
}
}