Commit 0e2ac865 by Carsten Brandt

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

parent d34f8486
...@@ -21,12 +21,18 @@ namespace yii\caching; ...@@ -21,12 +21,18 @@ namespace yii\caching;
class ApcCache extends Cache class ApcCache extends Cache
{ {
/** /**
* Checks the existence of a key in APC cache. * Checks whether a specified key exists in the cache.
* @param string $key the key to be checked. * This can be faster than getting the value from the cache if the data is big.
* @return boolean if the key exists or not * 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); return apc_exists($key);
} }
......
...@@ -134,6 +134,25 @@ abstract class Cache extends Component implements \ArrayAccess ...@@ -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. * Retrieves multiple values from cache with the specified keys.
* Some caches (such as memcache, apc) allow retrieving multiple cached values at the same time, * 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, * which may improve the performance. In case a cache does not support this feature natively,
......
...@@ -91,6 +91,18 @@ abstract class CacheTestCase extends TestCase ...@@ -91,6 +91,18 @@ abstract class CacheTestCase extends TestCase
$this->assertEquals('array_test', $array['array_test']); $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() public function testArrayAccess()
{ {
$cache = $this->getCacheInstance(); $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