mkorkmaz / redislabs-rejson
Redislabs RedisJSON aka ReJSON Module Client for PHP that supports Predis and PhpRedis
Installs: 76 304
Dependents: 1
Suggesters: 0
Security: 0
Stars: 42
Watchers: 5
Forks: 7
Open Issues: 1
Requires
- php: ^8.1
- ext-json: *
- mkorkmaz/redislabs-common: ^1.0
Requires (Dev)
- ext-redis: *
- codeception/codeception: ^5.0
- codeception/module-asserts: ^3.0
- php-coveralls/php-coveralls: ^2.1
- phpstan/phpstan: ^1.9
- predis/predis: ^2.0
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^3.3
Suggests
- ext-redis: If your application depends of redis extention.
- predis/predis: If your application depends on predis.
README
RedisJSON-PHP provides a client for Redislabs' ReJSON Module for PHP. This library supports both widely used redis clients (PECL Redis Extension and Predis).
About RedisJSON
"RedisJSON is a Redis module that implements ECMA-404 The JSON Data Interchange Standard as a native data type. It allows storing, updating and fetching JSON values from Redis keys (documents)".
RedisJSON-PHP Interface
Commanda are named after lowercase version of the original RedisJSON commands.
<?php use Redislabs\Interfaces\ModuleInterface; use Predis\ClientInterface as PredisClient; use Redis as PhpRedisClient; interface RedisJsonInterface extends ModuleInterface { public function set(string $key, string $path, $json, ?string $existentialModifier = null); public function get(...$arguments); public function del(string $key, ?string $path = '.'): int; public function forget(string $key, ?string $path = '.'): int; public function mget(...$arguments); public function type(string $key, ?string $paths = '.'); public function numincrby(string $key, string $path, int $incrementBy); public function nummultby(string $key, string $path, int $multiplyBy); public function strappend(string $key, $json, ?string $path = '.'); public function strlen(string $key, ?string $path = '.'); public function arrappend(string $key, string $path, ...$jsons); public function arrindex(string $key, string $path, $json, ?int $start = 0, ?int $stop = 0); public function arrinsert(string $key, string $path, int $index, ...$jsons); public function arrlen(string $key, string $path = '.'); public function arrpop(string $key, ?string $path = '.', ?int $index = -1); public function arrtrim(string $key, $path, ?int $start = 0, ?int $stop = 0); public function objkeys(string $key, ?string $path = '.'); public function objlen(string $key, ?string $path = '.'); public function debug(string $subcommand, ?string $key = null, ?string $path = '.'); public function resp(string $key, ?string $paths = '.'); public function getClient(); public function raw(string $command, ...$arguments); public static function createWithPredis(PredisClient $client); public static function createWithPhpRedis(PhpRedisClient $client); }
Installation
The recommended method to install RedisJSON-PHP for ReJSON is with composer.
composer require mkorkmaz/redislabs-rejson
If you use Redis ReJSON module version 1.0:
composer require mkorkmaz/redislabs-rejson:"^1.0"
Usage
You need PECL Redis Extension or Predis to use ReJSON-PHP.
Creating RedisJSON Client
Example for PECL Redis Extension
<?php declare(strict_types=1); use Redis; use Redislabs\Module\RedisJson\RedisJson; $redisClient = new Redis(); $redisClient->connect('127.0.0.1'); $reJSON = ReJSON::createWithPhpRedis($redisClient);
Example for Predis
<?php declare(strict_types=1); use Predis; use Redislabs\Module\RedisJson\RedisJson; $redisClient = new Predis\Client(); $redisJson = RedisJson::createWithPredis($redisClient);
Running commands
- $key (or $keys - array that containes $key items) parameters are all string.
- $json (or $jsons - array that containes $json items) parameters can be any type of json encodable data (array, int, string, stdClass, any JsonSerializable object etc...).
- Commands automatically performs json encoding these data. Functions also returns json decoded data if the response is json string.
<?php $redisJson->set('test', '.', ['foo'=>'bar'], 'NX'); $redisJson->set('test', '.baz', 'qux'); $redisJson->set('test', '.baz', 'quux', 'XX'); $redisJson->set('test2', '.', ['foo2'=>'bar2']); $baz = $redisJson->get('test', '.baz'); var_dump($baz); // Prints string(4) "quux" $array = $redisJson->get('test', '.'); var_dump($array); /* Prints result as an array instead of an object array(2) { ["foo"]=> string(3) "bar" ["baz"]=> string(4) "quux" } */ $array = $redisJson->mget('test', 'test2', '.'); var_dump($array); /* Prints result as an associative array instead of an object array(2) { ["test"]=> array(2) { ["foo"]=> string(3) "bar" ["baz"]=> string(4) "quux" } ["test2"]=> array(1) { ["foo2"]=> string(3) "bar2" } } */
Test and Development
You can use Docker Image provided by Redislabs.
docker run -p 6379:6379 redislabs/rejson:2.0.4