Commit 0e2ac865 by Carsten Brandt

added Cache::exists() to check key existance in cache

parent d34f8486
......@@ -21,12 +21,18 @@ namespace yii\caching;
class ApcCache extends Cache
{
/**
* Checks the existence of a key in APC cache.
* @param string $key the key to be checked.
* @return boolean if the key exists or not
* 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 keyExists($key)
public function exists($key)
{
$key = $this->buildKey($key);
return apc_exists($key);
}
......
......@@ -134,6 +134,25 @@ abstract class Cache extends Component implements \ArrayAccess
}
/**
* 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.
* In case a cache does not support this feature natively, this method will try to simulate it
* but has no performance improvement over getting it.
* 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);
$value = $this->getValue($key);
return $value !== false;
}
/**
* Retrieves multiple values from cache with the specified keys.
* Some caches (such as memcache, apc) allow retrieving multiple cached values at the same time,
* which may improve the performance. In case a cache does not support this feature natively,
......
......@@ -91,6 +91,18 @@ abstract class CacheTestCase extends TestCase
$this->assertEquals('array_test', $array['array_test']);
}
public function testExists()
{
$cache = $this->prepare();
$this->assertTrue($cache->exists('string_test'));
// check whether exists affects the value
$this->assertEquals('string_test', $cache->get('string_test'));
$this->assertTrue($cache->exists('number_test'));
$this->assertFalse($cache->exists('not_exists'));
}
public function testArrayAccess()
{
$cache = $this->getCacheInstance();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment