RedisJson con la extensión PHP Redis phpredis.
Phpredis-JSON proporciona un conjunto completo de comandos para el módulo RedisJson. Está construido sobre phpredis
y lo usa como cliente de Redis, por lo que también puede aprovechar algunas de las funciones incluidas en phpredis
como cliente de Redis.
Aunque puede emitir comandos RedisJSON utilizando algunos clientes PHP Redis que le brindan la posibilidad de enviar comandos Redis sin formato, 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 ' );
Desde la consola ejecute el siguiente comando desde el directorio raíz de este proyecto:
./vendor/bin/phpunit
Si no ha configurado su servidor Redis local en 127.0.0.1:6379, puede configurar REDIS_TEST_SERVER, REDIS_TEST_PORT y REDIS_TEST_DATABASE en el archivo ./phpunit.xml
con su host, puerto y base de datos de Redis local antes de ejecutar el comando anterior.
Una vez instalado Docker, ejecute el siguiente comando en el directorio raíz de este proyecto:
bash run-tests-docker.sh
Al ejecutar el script bash anterior, se crearán dos servicios acoplables, uno con PHP 7.2 con las extensiones xdebug y redis habilitadas y otro con la imagen de redislabrejson:1.0.4
(servidor Redis 5 con el módulo RedisJson instalado). Luego, las pruebas se ejecutarán dentro del contenedor del servicio Docker phpredis-json
y finalmente se detendrán ambos contenedores.
El código Phpredis-Json se distribuye bajo licencia MIT, consulte el archivo LICENCIA