Skip to content

Commit

Permalink
Adding prefix based cache clearning to Wincache.
Browse files Browse the repository at this point in the history
This matches APC and Memcache.
Fixes #1911
  • Loading branch information
markstory committed Aug 20, 2011
1 parent ef921fa commit 0091fac
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 5 deletions.
2 changes: 1 addition & 1 deletion lib/Cake/Cache/Engine/ApcEngine.php
Expand Up @@ -110,7 +110,7 @@ public function delete($key) {
*
* @param boolean $check If true, nothing will be cleared, as entries are removed
* from APC as they expired. This flag is really only used by FileEngine.
* @return boolean True if the cache was successfully cleared, false otherwise
* @return boolean True Returns true.
*/
public function clear($check) {
if ($check) {
Expand Down
22 changes: 18 additions & 4 deletions lib/Cake/Cache/Engine/WincacheEngine.php
Expand Up @@ -112,13 +112,27 @@ public function delete($key) {
}

/**
* Delete all keys from the cache. This will clear every cache value stored
* in wincache.
* Delete all keys from the cache. This will clear every
* item in the cache matching the cache config prefix.
*
* @return boolean True if the cache was successfully cleared, false otherwise
*
* @param boolean $check If true, nothing will be cleared, as entries will
* naturally expire in wincache..
* @return boolean True Returns true.
*/
public function clear($check) {
return wincache_ucache_clear();
if ($check) {
return true;
}
$info = wincache_ucache_info();
$cacheKeys = $info['ucache_entries'];
unset($info);
foreach ($cacheKeys as $key) {
if (strpos($key['key_name'], $this->settings['prefix']) === 0) {
wincache_ucache_delete($key['key_name']);
}
}
return true;
}

}
2 changes: 2 additions & 0 deletions lib/Cake/Test/Case/Cache/Engine/WincacheEngineTest.php
Expand Up @@ -188,10 +188,12 @@ public function testIncrement() {
* @return void
*/
public function testClear() {
wincache_ucache_set('not_cake', 'safe');
Cache::write('some_value', 'value', 'wincache');

$result = Cache::clear(false, 'wincache');
$this->assertTrue($result);
$this->assertFalse(Cache::read('some_value', 'wincache'));
$this->assertEquals('safe', wincache_ucache_get('not_cake'));
}
}

0 comments on commit 0091fac

Please sign in to comment.