From 30113d3be9aca70886e259a60d0f9f7e2705bdac Mon Sep 17 00:00:00 2001 From: Zankaria Date: Mon, 28 Oct 2024 22:15:57 +0100 Subject: [PATCH 1/4] RedisCacheDriver.php: remove erroneous expire scaling --- inc/Data/Driver/RedisCacheDriver.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/inc/Data/Driver/RedisCacheDriver.php b/inc/Data/Driver/RedisCacheDriver.php index 46e602d4..8f3e3dc8 100644 --- a/inc/Data/Driver/RedisCacheDriver.php +++ b/inc/Data/Driver/RedisCacheDriver.php @@ -33,8 +33,7 @@ class RedisCacheDriver implements CacheDriver { if ($expires === false) { $this->inner->set($this->prefix . $key, \json_encode($value)); } else { - $expires = $expires * 1000; // Seconds to milliseconds. - $this->inner->setex($this->prefix . $key, $expires, \json_encode($value)); + $this->inner->setEx($this->prefix . $key, $expires, \json_encode($value)); } } From 96a6307ff828ffb751f6ed44a9de4db040c68dc8 Mon Sep 17 00:00:00 2001 From: Zankaria Date: Mon, 28 Oct 2024 22:21:33 +0100 Subject: [PATCH 2/4] RedisCacheDriver.php: use extension provided serialization --- inc/Data/Driver/RedisCacheDriver.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/inc/Data/Driver/RedisCacheDriver.php b/inc/Data/Driver/RedisCacheDriver.php index 8f3e3dc8..9c76d52d 100644 --- a/inc/Data/Driver/RedisCacheDriver.php +++ b/inc/Data/Driver/RedisCacheDriver.php @@ -14,6 +14,9 @@ class RedisCacheDriver implements CacheDriver { if ($password) { $this->inner->auth($password); } + if (!$this->inner->setOption(\Redis::OPT_SERIALIZER, \Redis::SERIALIZER_JSON)) { + throw new \RuntimeException('Unable to configure Redis serializer'); + } if (!$this->inner->select($database)) { throw new \RuntimeException('Unable to connect to Redis!'); } @@ -26,14 +29,14 @@ class RedisCacheDriver implements CacheDriver { if ($ret === false) { return null; } - return \json_decode($ret, true); + return $ret; } public function set(string $key, mixed $value, mixed $expires = false): void { if ($expires === false) { - $this->inner->set($this->prefix . $key, \json_encode($value)); + $this->inner->set($this->prefix . $key, $value); } else { - $this->inner->setEx($this->prefix . $key, $expires, \json_encode($value)); + $this->inner->setEx($this->prefix . $key, $expires, $value); } } From b224bfefdfcf20c982e9924bf021d23b49389324 Mon Sep 17 00:00:00 2001 From: Zankaria Date: Mon, 28 Oct 2024 22:56:27 +0100 Subject: [PATCH 3/4] RedisCacheDriver.php: flush only the key-value pairs with matching prefix --- inc/Data/Driver/RedisCacheDriver.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/inc/Data/Driver/RedisCacheDriver.php b/inc/Data/Driver/RedisCacheDriver.php index 9c76d52d..5f387b3d 100644 --- a/inc/Data/Driver/RedisCacheDriver.php +++ b/inc/Data/Driver/RedisCacheDriver.php @@ -45,6 +45,10 @@ class RedisCacheDriver implements CacheDriver { } public function flush(): void { - $this->inner->flushDB(); + if (empty($this->prefix)) { + $this->inner->flushDB(); + } else { + $this->inner->unlink($this->inner->keys("{$this->prefix}*")); + } } } From a6399ed3b011370360aa1dc7fefdcbbdbb4fb846 Mon Sep 17 00:00:00 2001 From: Zankaria Date: Mon, 28 Oct 2024 23:02:51 +0100 Subject: [PATCH 4/4] RedisCacheDriver.php: add false value support --- inc/Data/Driver/RedisCacheDriver.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/inc/Data/Driver/RedisCacheDriver.php b/inc/Data/Driver/RedisCacheDriver.php index 5f387b3d..d1b36d57 100644 --- a/inc/Data/Driver/RedisCacheDriver.php +++ b/inc/Data/Driver/RedisCacheDriver.php @@ -29,10 +29,14 @@ class RedisCacheDriver implements CacheDriver { if ($ret === false) { return null; } + if ($ret === null) { + return false; + } return $ret; } public function set(string $key, mixed $value, mixed $expires = false): void { + $value = $value === false ? null : $value; if ($expires === false) { $this->inner->set($this->prefix . $key, $value); } else {