From be83696f02378395470d178aa54c95de1bdbc505 Mon Sep 17 00:00:00 2001 From: Philipp Holzer Date: Sun, 8 Jul 2018 13:35:28 +0200 Subject: [PATCH] Redis serialize instead of json because of objects --- src/Core/Cache/RedisCacheDriver.php | 8 ++--- tests/src/Core/Cache/CacheTest.php | 50 +++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/src/Core/Cache/RedisCacheDriver.php b/src/Core/Cache/RedisCacheDriver.php index 223c2b8a9..20bdb75d2 100644 --- a/src/Core/Cache/RedisCacheDriver.php +++ b/src/Core/Cache/RedisCacheDriver.php @@ -40,7 +40,7 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver return null; } - $value = json_decode($cached); + $value = unserialize($cached); // Only return a value if the serialized value is valid. // We also check if the db entry is a serialized @@ -56,7 +56,7 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver { $cachekey = $this->getCacheKey($key); - $cached = json_encode($value); + $cached = serialize($value); if ($ttl > 0) { return $this->redis->setex( @@ -93,7 +93,7 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver public function add($key, $value, $ttl = Cache::FIVE_MINUTES) { $cachekey = $this->getCacheKey($key); - $cached = json_encode($value); + $cached = serialize($value); return $this->redis->setnx($cachekey, $cached); } @@ -105,7 +105,7 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver { $cachekey = $this->getCacheKey($key); - $newCached = json_encode($newValue); + $newCached = serialize($newValue); $this->redis->watch($cachekey); // If the old value isn't what we expected, somebody else changed the key meanwhile diff --git a/tests/src/Core/Cache/CacheTest.php b/tests/src/Core/Cache/CacheTest.php index 4f3e4d351..5be0e4b89 100644 --- a/tests/src/Core/Cache/CacheTest.php +++ b/tests/src/Core/Cache/CacheTest.php @@ -5,6 +5,7 @@ namespace Friendica\Test\src\Core\Cache; use Friendica\App; use Friendica\Core\Config; use Friendica\Test\DatabaseTest; +use Friendica\Util\DateTimeFormat; abstract class CacheTest extends DatabaseTest { @@ -104,4 +105,53 @@ abstract class CacheTest extends DatabaseTest $this->assertNull($this->instance->get('value1')); } + + function testDifferentTypesInCache() { + // String test + $value = "foobar"; + $this->instance->set('stringVal', $value); + $received = $this->instance->get('stringVal'); + $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received)); + + // Integer test + $value = 1; + $this->instance->set('intVal', $value); + $received = $this->instance->get('intVal'); + $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received)); + + // Boolean test + $value = true; + $this->instance->set('boolValTrue', $value); + $received = $this->instance->get('boolValTrue'); + $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received)); + + $value = false; + $this->instance->set('boolValFalse', $value); + $received = $this->instance->get('boolValFalse'); + $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received)); + + // float + $value = 4.6634234; + $this->instance->set('decVal', $value); + $received = $this->instance->get('decVal'); + $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received)); + + // array + $value = array('1', '2', '3', '4', '5'); + $this->instance->set('arrayVal', $value); + $received = $this->instance->get('arrayVal'); + $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received)); + + // object + $value = new DateTimeFormat(); + $this->instance->set('objVal', $value); + $received = $this->instance->get('objVal'); + $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received)); + + // null + $value = null; + $this->instance->set('objVal', $value); + $received = $this->instance->get('objVal'); + $this->assertEquals($value, $received, 'Value type changed from ' . gettype($value) . ' to ' . gettype($received)); + } }