Browse Source

implement Cache::exists() for various cache backends

fixes #811
tags/2.0.0-beta
Carsten Brandt 11 years ago
parent
commit
427c373ba6
  1. 29
      framework/yii/caching/DbCache.php
  2. 20
      framework/yii/caching/FileCache.php
  3. 15
      framework/yii/caching/RedisCache.php
  4. 18
      framework/yii/caching/WinCache.php
  5. 16
      framework/yii/caching/XCache.php

29
framework/yii/caching/DbCache.php

@ -89,6 +89,35 @@ class DbCache extends Cache
} }
/** /**
* Checks whether a specified key exists in the cache.
* This can be faster than getting the value from the cache if the data is big.
* Note that this method does not check whether the dependency associated
* with the cached data, if there is any, has changed. So a call to [[get]]
* may return false while exists returns true.
* @param mixed $key a key identifying the cached value. This can be a simple string or
* a complex data structure consisting of factors representing the key.
* @return boolean true if a value exists in cache, false if the value is not in the cache or expired.
*/
public function exists($key)
{
$key = $this->buildKey($key);
$query = new Query;
$query->select(array('COUNT(*)'))
->from($this->cacheTable)
->where('[[id]] = :id AND ([[expire]] = 0 OR [[expire]] >' . time() . ')', array(':id' => $key));
if ($this->db->enableQueryCache) {
// temporarily disable and re-enable query caching
$this->db->enableQueryCache = false;
$result = $query->createCommand($this->db)->queryScalar();
$this->db->enableQueryCache = true;
} else {
$result = $query->createCommand($this->db)->queryScalar();
}
return $result > 0;
}
/**
* Retrieves a value from cache with a specified key. * Retrieves a value from cache with a specified key.
* This is the implementation of the method declared in the parent class. * This is the implementation of the method declared in the parent class.
* @param string $key a unique key identifying the cached value * @param string $key a unique key identifying the cached value

20
framework/yii/caching/FileCache.php

@ -59,6 +59,26 @@ class FileCache extends Cache
} }
/** /**
* Checks whether a specified key exists in the cache.
* This can be faster than getting the value from the cache if the data is big.
* Note that this method does not check whether the dependency associated
* with the cached data, if there is any, has changed. So a call to [[get]]
* may return false while exists returns true.
* @param mixed $key a key identifying the cached value. This can be a simple string or
* a complex data structure consisting of factors representing the key.
* @return boolean true if a value exists in cache, false if the value is not in the cache or expired.
*/
public function exists($key)
{
$cacheFile = $this->getCacheFile($this->buildKey($key));
if (($time = @filemtime($cacheFile)) > time()) {
return true;
} else {
return false;
}
}
/**
* Retrieves a value from cache with a specified key. * Retrieves a value from cache with a specified key.
* This is the implementation of the method declared in the parent class. * This is the implementation of the method declared in the parent class.
* @param string $key a unique key identifying the cached value * @param string $key a unique key identifying the cached value

15
framework/yii/caching/RedisCache.php

@ -104,6 +104,21 @@ class RedisCache extends Cache
} }
/** /**
* Checks whether a specified key exists in the cache.
* This can be faster than getting the value from the cache if the data is big.
* Note that this method does not check whether the dependency associated
* with the cached data, if there is any, has changed. So a call to [[get]]
* may return false while exists returns true.
* @param mixed $key a key identifying the cached value. This can be a simple string or
* a complex data structure consisting of factors representing the key.
* @return boolean true if a value exists in cache, false if the value is not in the cache or expired.
*/
public function exists($key)
{
return (bool) $this->_connection->executeCommand('EXISTS', array($this->buildKey($key)));
}
/**
* Retrieves a value from cache with a specified key. * Retrieves a value from cache with a specified key.
* This is the implementation of the method declared in the parent class. * This is the implementation of the method declared in the parent class.
* @param string $key a unique key identifying the cached value * @param string $key a unique key identifying the cached value

18
framework/yii/caching/WinCache.php

@ -8,7 +8,7 @@
namespace yii\caching; namespace yii\caching;
/** /**
* WinCache provides XCache caching in terms of an application component. * WinCache provides Windows Cache caching in terms of an application component.
* *
* To use this application component, the [WinCache PHP extension](http://www.iis.net/expand/wincacheforphp) * To use this application component, the [WinCache PHP extension](http://www.iis.net/expand/wincacheforphp)
* must be loaded. Also note that "wincache.ucenabled" should be set to "On" in your php.ini file. * must be loaded. Also note that "wincache.ucenabled" should be set to "On" in your php.ini file.
@ -21,6 +21,22 @@ namespace yii\caching;
class WinCache extends Cache class WinCache extends Cache
{ {
/** /**
* Checks whether a specified key exists in the cache.
* This can be faster than getting the value from the cache if the data is big.
* Note that this method does not check whether the dependency associated
* with the cached data, if there is any, has changed. So a call to [[get]]
* may return false while exists returns true.
* @param mixed $key a key identifying the cached value. This can be a simple string or
* a complex data structure consisting of factors representing the key.
* @return boolean true if a value exists in cache, false if the value is not in the cache or expired.
*/
public function exists($key)
{
$key = $this->buildKey($key);
return wincache_ucache_exists($key);
}
/**
* Retrieves a value from cache with a specified key. * Retrieves a value from cache with a specified key.
* This is the implementation of the method declared in the parent class. * This is the implementation of the method declared in the parent class.
* @param string $key a unique key identifying the cached value * @param string $key a unique key identifying the cached value

16
framework/yii/caching/XCache.php

@ -22,6 +22,22 @@ namespace yii\caching;
class XCache extends Cache class XCache extends Cache
{ {
/** /**
* Checks whether a specified key exists in the cache.
* This can be faster than getting the value from the cache if the data is big.
* Note that this method does not check whether the dependency associated
* with the cached data, if there is any, has changed. So a call to [[get]]
* may return false while exists returns true.
* @param mixed $key a key identifying the cached value. This can be a simple string or
* a complex data structure consisting of factors representing the key.
* @return boolean true if a value exists in cache, false if the value is not in the cache or expired.
*/
public function exists($key)
{
$key = $this->buildKey($key);
return xcache_isset($key);
}
/**
* Retrieves a value from cache with a specified key. * Retrieves a value from cache with a specified key.
* This is the implementation of the method declared in the parent class. * This is the implementation of the method declared in the parent class.
* @param string $key a unique key identifying the cached value * @param string $key a unique key identifying the cached value

Loading…
Cancel
Save