diff --git a/lib/private/memcache/redis.php b/lib/private/memcache/redis.php
index f21619887d01efcb1b9b16ae52899fbedc75da1d..78ddd0813384f582d98d117f1f92bbd0984e55da 100644
--- a/lib/private/memcache/redis.php
+++ b/lib/private/memcache/redis.php
@@ -49,18 +49,18 @@ class Redis extends Cache {
 
 	public function get($key) {
 		$result = self::$cache->get($this->getNamespace() . $key);
-		if ($result === false and ! self::$cache->exists($this->getNamespace() . $key)) {
+		if ($result === false && !self::$cache->exists($this->getNamespace() . $key)) {
 			return null;
 		} else {
-			return $result;
+			return json_decode($result, true);
 		}
 	}
 
 	public function set($key, $value, $ttl = 0) {
 		if ($ttl > 0) {
-			return self::$cache->setex($this->getNamespace() . $key, $ttl, $value);
+			return self::$cache->setex($this->getNamespace() . $key, $ttl, json_encode($value));
 		} else {
-			return self::$cache->set($this->getNamespace() . $key, $value);
+			return self::$cache->set($this->getNamespace() . $key, json_encode($value));
 		}
 	}
 
diff --git a/tests/lib/memcache/cache.php b/tests/lib/memcache/cache.php
index 8a4a708e4b7588fcb91efbd865faa92fdf1059fc..e5ceae52fb0e0b1eed7574730c7ce7cd15cb0848 100644
--- a/tests/lib/memcache/cache.php
+++ b/tests/lib/memcache/cache.php
@@ -22,6 +22,12 @@ abstract class Cache extends \Test_Cache {
 		$this->assertEquals('bar', $this->instance->get('foo'));
 	}
 
+	public function testGetArrayAfterSet() {
+		$this->assertNull($this->instance->get('foo'));
+		$this->instance->set('foo', ['bar']);
+		$this->assertEquals(['bar'], $this->instance->get('foo'));
+	}
+
 	public function testDoesNotExistAfterRemove() {
 		$this->instance->set('foo', 'bar');
 		$this->instance->remove('foo');