Repository: codeigniter4/CodeIgniter4 (PHP)

Issue:
Bug: increment/decrement not working in Cache RedisHandler; method "remember" not listed in CacheInterface
### PHP Version

8.0

### CodeIgniter4 Version

4.2.4

### CodeIgniter4 Installation Method

Composer (as dependency to an existing project)

### Which operating systems have you tested for this bug?

Linux

### Which server did you use?

fpm-fcgi

### Database

MySQL

### What happened?

The methods increment and decrement use the wrong php redis hashKey. Currently "data" is used - it should be "__ci_value" if I am right.

The method "remember" is not listed CacheInterface (system/Cache/) and is not suggested. See docs https://www.codeigniter.com/user_guide/libraries/caching.html.

Thank you

### Steps to Reproduce

```php
cache()->save('test', 5);  // test = 5
cache()->decrement('test', 2);

cache()->get('test'); // test = 5; it should be 3
```

### Expected Output

3 instead of 5

### Anything else?

_No response_


Discussion:
> The methods increment and decrement use the wrong php redis hashKey. Currently "data" is used - it should be "__ci_value" if I am right.

Please open a PR with your changes so that we can discuss further. Also don't forget to add unit tests.

> The method "remember" is not listed CacheInterface (system/Cache/) and is not suggested. See docs https://www.codeigniter.com/user_guide/libraries/caching.html.

This is intended. The "remember" method came after `CacheInterface` was finalized, so adding it would break custom implementations of the interface. It can be added to the interface though in a major version bump.
It seems the increment and decrement functions are untested.
https://github.com/codeigniter4/CodeIgniter4/blob/57385ea1bf64fb31c235f9c15eff4d39a69cbbc1/tests/system/Cache/Handlers/RedisHandlerTest.php#L169-L176



Patch:
diff --git a/system/Cache/Handlers/RedisHandler.php b/system/Cache/Handlers/RedisHandler.php
index df179e7455e6..b84c0115b1f8 100644
--- a/system/Cache/Handlers/RedisHandler.php
+++ b/system/Cache/Handlers/RedisHandler.php
@@ -200,7 +200,7 @@ public function increment(string $key, int $offset = 1)
     {
         $key = static::validateKey($key, $this->prefix);
 
-        return $this->redis->hIncrBy($key, 'data', $offset);
+        return $this->redis->hIncrBy($key, '__ci_value', $offset);
     }
 
     /**
@@ -208,9 +208,7 @@ public function increment(string $key, int $offset = 1)
      */
     public function decrement(string $key, int $offset = 1)
     {
-        $key = static::validateKey($key, $this->prefix);
-
-        return $this->redis->hIncrBy($key, 'data', -$offset);
+        return $this->increment($key, -$offset);
     }
 
     /**


Test patch:
diff --git a/tests/system/Cache/Handlers/RedisHandlerTest.php b/tests/system/Cache/Handlers/RedisHandlerTest.php
index a10d92171ec8..2c79be076eca 100644
--- a/tests/system/Cache/Handlers/RedisHandlerTest.php
+++ b/tests/system/Cache/Handlers/RedisHandlerTest.php
@@ -166,14 +166,22 @@ public function testDeleteMatchingSuffix()
         $this->assertSame('keys=90', $dbInfo[0]);
     }
 
-    // FIXME: I don't like all Hash logic very much. It's wasting memory.
-    // public function testIncrement()
-    // {
-    // }
-
-    // public function testDecrement()
-    // {
-    // }
+    public function testIncrementAndDecrement()
+    {
+        $this->handler->save('counter', 100);
+
+        foreach (range(1, 10) as $step) {
+            $this->handler->increment('counter', $step);
+        }
+
+        $this->assertSame(155, $this->handler->get('counter'));
+
+        $this->handler->decrement('counter', 20);
+        $this->assertSame(135, $this->handler->get('counter'));
+
+        $this->handler->increment('counter', 5);
+        $this->assertSame(140, $this->handler->get('counter'));
+    }
 
     public function testClean()
     {