diff --git a/src/Cache/Engine/RedisEngine.php b/src/Cache/Engine/RedisEngine.php index bce4cf324d2..22a2094307e 100644 --- a/src/Cache/Engine/RedisEngine.php +++ b/src/Cache/Engine/RedisEngine.php @@ -153,11 +153,11 @@ public function read($key) $key = $this->_key($key); $value = $this->_Redis->get($key); - if (ctype_digit($value)) { - $value = (int)$value; + if (preg_match('/^[-]?\d+$/', $value)) { + return (int)$value; } if ($value !== false && is_string($value)) { - $value = unserialize($value); + return unserialize($value); } return $value; } diff --git a/tests/TestCase/Cache/Engine/RedisEngineTest.php b/tests/TestCase/Cache/Engine/RedisEngineTest.php index 84fe69869ea..34aaf4327b4 100644 --- a/tests/TestCase/Cache/Engine/RedisEngineTest.php +++ b/tests/TestCase/Cache/Engine/RedisEngineTest.php @@ -192,6 +192,23 @@ public function testMultiDatabaseOperations() Cache::drop('redisdb1'); } + /** + * test write numbers method + * + * @return void + */ + public function testWriteNumbers() + { + $result = Cache::write('test-counter', 1, 'redis'); + $this->assertSame(1, Cache::read('test-counter', 'redis')); + + $result = Cache::write('test-counter', 0, 'redis'); + $this->assertSame(0, Cache::read('test-counter', 'redis')); + + $result = Cache::write('test-counter', -1, 'redis'); + $this->assertSame(-1, Cache::read('test-counter', 'redis')); + } + /** * testReadAndWriteCache method *