Browse Source

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

tags/2.0.0-beta
Carsten Brandt 11 years ago
parent
commit
0e2ac86566
  1. 14
      framework/yii/caching/ApcCache.php
  2. 19
      framework/yii/caching/Cache.php
  3. 12
      tests/unit/framework/caching/CacheTestCase.php

14
framework/yii/caching/ApcCache.php

@ -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);
}

19
framework/yii/caching/Cache.php

@ -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,

12
tests/unit/framework/caching/CacheTestCase.php

@ -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();

Loading…
Cancel
Save