diff --git a/lib/Cake/Cache/Engine/MemcacheEngine.php b/lib/Cake/Cache/Engine/MemcacheEngine.php index ac38168ed78..150d31c6829 100644 --- a/lib/Cake/Cache/Engine/MemcacheEngine.php +++ b/lib/Cake/Cache/Engine/MemcacheEngine.php @@ -27,6 +27,14 @@ */ class MemcacheEngine extends CacheEngine { +/** + * Contains the compiled group names + * (prefixed witht the global configuration prefix) + * + * @var array + **/ + protected $_compiledGroupNames = array(); + /** * Memcache wrapper. * @@ -243,9 +251,17 @@ public function connect($host, $port = 11211) { * @return array **/ public function groups() { - $groups = $this->_Memcache->get($this->settings['groups']); - if (count($groups) !== count($this->settings['groups'])) { + $groups = $this->_compiledGroupNames; + if (empty($groups)) { foreach ($this->settings['groups'] as $group) { + $groups[] = $this->settings['prefix'] . $group; + } + $this->_compiledGroupNames = $groups; + } + + $groups = $this->_Memcache->get($groups); + if (count($groups) !== count($this->settings['groups'])) { + foreach ($this->_compiledGroupNames as $group) { if (!isset($groups[$group])) { $this->_Memcache->set($group, 1, false, 0); $groups[$group] = 1; @@ -269,6 +285,6 @@ public function groups() { * @return boolean success **/ public function clearGroup($group) { - return (bool) $this->_Memcache->increment($group); + return (bool) $this->_Memcache->increment($this->settings['prefix'] . $group); } } diff --git a/lib/Cake/Test/Case/Cache/Engine/MemcacheEngineTest.php b/lib/Cake/Test/Case/Cache/Engine/MemcacheEngineTest.php index 539f57aeadb..64eb843fad3 100644 --- a/lib/Cake/Test/Case/Cache/Engine/MemcacheEngineTest.php +++ b/lib/Cake/Test/Case/Cache/Engine/MemcacheEngineTest.php @@ -413,12 +413,13 @@ public function testGroupReadWrite() { Cache::config('memcache_groups', array( 'engine' => 'Memcache', 'duration' => 3600, - 'groups' => array('group_a', 'group_b') + 'groups' => array('group_a', 'group_b'), + 'prefix' => 'test_' )); Cache::config('memcache_helper', array( 'engine' => 'Memcache', 'duration' => 3600, - 'prefix' => '' + 'prefix' => 'test_' )); $this->assertTrue(Cache::write('test_groups', 'value', 'memcache_groups')); $this->assertEquals('value', Cache::read('test_groups', 'memcache_groups'));