Redis serialize instead of json because of objects

This commit is contained in:
Philipp Holzer 2018-07-08 13:35:28 +02:00
parent 5f1b5f82ad
commit be83696f02
No known key found for this signature in database
GPG key ID: 58160D7D6AF942B6
2 changed files with 54 additions and 4 deletions

View file

@ -40,7 +40,7 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver
return null; return null;
} }
$value = json_decode($cached); $value = unserialize($cached);
// Only return a value if the serialized value is valid. // Only return a value if the serialized value is valid.
// We also check if the db entry is a serialized // We also check if the db entry is a serialized
@ -56,7 +56,7 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver
{ {
$cachekey = $this->getCacheKey($key); $cachekey = $this->getCacheKey($key);
$cached = json_encode($value); $cached = serialize($value);
if ($ttl > 0) { if ($ttl > 0) {
return $this->redis->setex( return $this->redis->setex(
@ -93,7 +93,7 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver
public function add($key, $value, $ttl = Cache::FIVE_MINUTES) public function add($key, $value, $ttl = Cache::FIVE_MINUTES)
{ {
$cachekey = $this->getCacheKey($key); $cachekey = $this->getCacheKey($key);
$cached = json_encode($value); $cached = serialize($value);
return $this->redis->setnx($cachekey, $cached); return $this->redis->setnx($cachekey, $cached);
} }
@ -105,7 +105,7 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver
{ {
$cachekey = $this->getCacheKey($key); $cachekey = $this->getCacheKey($key);
$newCached = json_encode($newValue); $newCached = serialize($newValue);
$this->redis->watch($cachekey); $this->redis->watch($cachekey);
// If the old value isn't what we expected, somebody else changed the key meanwhile // If the old value isn't what we expected, somebody else changed the key meanwhile

View file

@ -5,6 +5,7 @@ namespace Friendica\Test\src\Core\Cache;
use Friendica\App; use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
use Friendica\Test\DatabaseTest; use Friendica\Test\DatabaseTest;
use Friendica\Util\DateTimeFormat;
abstract class CacheTest extends DatabaseTest abstract class CacheTest extends DatabaseTest
{ {
@ -104,4 +105,53 @@ abstract class CacheTest extends DatabaseTest
$this->assertNull($this->instance->get('value1')); $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));
}
} }