Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Adding prefix based cache clearning to Wincache.

This matches APC and Memcache.
Fixes #1911
  • Loading branch information...
commit 0091fac5b9c765cc76fcc24e0414740732d93f33 1 parent ef921fa
@markstory markstory authored
View
2  lib/Cake/Cache/Engine/ApcEngine.php
@@ -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) {
View
22 lib/Cake/Cache/Engine/WincacheEngine.php
@@ -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;
}
}
View
2  lib/Cake/Test/Case/Cache/Engine/WincacheEngineTest.php
@@ -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'));
}
}
Please sign in to comment.
Something went wrong with that request. Please try again.