RedisJson avec l'extension PHP Redis phpredis.
Phpredis-JSON fournit un ensemble complet de commandes pour le module RedisJson. Il est construit sur phpredis
et l'utilise comme client Redis. Vous pouvez donc également profiter de certaines des fonctionnalités incluses dans phpredis
en tant que client Redis.
Bien que vous puissiez émettre des commandes RedisJSON en utilisant certains clients PHP Redis qui vous offrent la possibilité d'envoyer des commandes Redis brutes, Phpredis-JSON :
<?php
use Averias RedisJson Enum JsonCommands ;
use Averias RedisJson Exception ResponseException ;
use Averias RedisJson Factory RedisJsonClientFactory ;
// *** get a RedisJsonClient ***
$ redisJsonClientFactory = new RedisJsonClientFactory ();
/**
* creates a RedisJsonClient with default connection params:
* [
* 'host' => '127.0.0.1',
* 'port' => 6379,
* 'timeout' => 0.0, // seconds
* 'retryInterval' => 15 // milliseconds
* 'readTimeout' => 2, // seconds
* 'persistenceId' => null // string for persistent connections, null for no persistent ones
* 'database' => 0 // Redis database index [0..15]
* ]
*/
$ defaultClient = $ redisJsonClientFactory -> createClient ();
// creates a configured RedisJsonClient
$ client = $ redisJsonClientFactory -> createClient ([
' host ' => ' 127.0.0.1 ' ,
' port ' => 6390 ,
' timeout ' => 2 ,
' database ' => 15
]);
// *** Redis JSON commands ***
$ result = $ client -> jsonSet ( ' people ' , [ " name " => " gafael " , " age " => 12 ]);
echo ( $ result === true ? ' true ' : ' false ' ) . PHP_EOL ; // true
$ result = $ client -> jsonGet ( ' people ' ); // $result = ["name":"gafael","age":12]
echo json_encode ( $ result ) . PHP_EOL ; // {"name":"gafael","age":12}
$ result = $ client -> jsonGet ( ' people ' , ' .name ' );
echo $ result . PHP_EOL ; // "gafael"
$ result = $ client -> jsonGet ( ' people ' , ' .age ' );
echo $ result . PHP_EOL ; // 12
// "nonexistent" key does not exist, so a ResponseException is thrown
try {
$ result = $ client -> jsonGet ( ' nonexistent ' );
echo $ result . PHP_EOL ;
} catch ( ResponseException $ e ) {
echo " key nonexistent does not exist " . PHP_EOL ;
}
// *** you can also send RedisJSON command as raw commands using "RedisJsonClient::executeRawCommand" ***
// you will send
$ result = $ client -> executeRawCommand (JsonCommands:: SET , ' people ' , ' .colors ' , ' ["blue", "green"] ' );
echo $ result . PHP_EOL ; // 'OK'
// and receive JSON values
$ result = $ client -> executeRawCommand (JsonCommands:: GET , ' people ' , ' . ' );
echo $ result . PHP_EOL ; // {"name":"gafael","age":12,"colors":["blue","green"]}
// *** you can also issue redis commands and use RedisJsonClient as "phpredis" client:
echo $ client -> hset ( ' hash-key ' , ' age ' , 34 ) . PHP_EOL ; // 0
echo $ client -> hget ( ' hash-key ' , ' age ' ) . PHP_EOL ; // 34
// $ret = [true,"val1",true,"val2"]
$ ret = $ client -> multi ()
-> set ( ' key1 ' , ' val1 ' )
-> get ( ' key1 ' )
-> set ( ' key2 ' , ' val2 ' )
-> get ( ' key2 ' )
-> exec ();
echo json_encode ( $ ret ) . PHP_EOL ;
RedisJsonClient::executeRawCommand
: // raw Redis JSON command
$ client -> executeRawCommand (JsonCommands:: GET , ' people ' , ' . ' );
// raw Redis command
$ client -> executeRawCommand ( ' hget, ' hash-key', ' foo ' );
Depuis la console, exécutez la commande suivante à partir du répertoire racine de ce projet :
./vendor/bin/phpunit
si vous n'avez pas configuré votre serveur Redis local dans 127.0.0.1:6379, vous pouvez définir REDIS_TEST_SERVER et REDIS_TEST_PORT et REDIS_TEST_DATABASE dans le fichier ./phpunit.xml
avec votre hôte, port et base de données Redis locaux avant d'exécuter la commande ci-dessus.
Une fois Docker installé, exécutez la commande suivante dans le répertoire racine de ce projet :
bash run-tests-docker.sh
en exécutant le script bash ci-dessus, deux services docker seront construits, un avec PHP 7.2 avec les extensions xdebug et redis activées et un autre avec l'image de redislabrejson:1.0.4
(serveur Redis 5 avec le module RedisJson installé). Ensuite, les tests seront exécutés dans le conteneur de service Docker phpredis-json
et enfin les deux conteneurs seront arrêtés.
Le code Phpredis-Json est distribué sous licence MIT, voir fichier LICENSE