Browse Source

Redis serialize instead of json because of objects

pull/5339/head
Philipp Holzer 3 years ago
parent
commit
be83696f02
No known key found for this signature in database GPG Key ID: 58160D7D6AF942B6
  1. 8
      src/Core/Cache/RedisCacheDriver.php
  2. 50
      tests/src/Core/Cache/CacheTest.php

8
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

50
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));
}
}
Loading…
Cancel
Save