A Redis module that allows running a JS functions inside the Redis processes.
Run the following on the main directoty:
> cargo build
Run the following on the main directoty:
> ./run.sh
The API expose by the module is very similar to the way Redis Functions is working. Lets write a simple hello world
RedisGears function that return the string hello world
:
#!js name=lib
redis.register_function('hello_world', function(){
return 'hello_world';
});
The first line indicates the engine to use (js
) and the library name (lib
). The rest is the library code.
Assuming we put the following code on a file lib.js
, we can register our function on RedisGears using RG.FUNCTION LOAD
command:
> redis-cli -x RG.FUNCTION LOAD < ./lib.js
OK
And now we can execute our function using RG.FUNCTION CALL
command, the command gets the library name and the function name:
> redis-cli RG.FUNCTION CALL lib hello_world
"hello_world"
It is possible to call Redis commands inside our gears function. The function gets as first argument a client object that allows interaction with Redis using call
function. The following example executes a simple PING
command and return the result:
#!js name=lib
redis.register_function('my_ping', function(client){
return client.call('ping');
});
If we will try to send it to our running Redis instance, we will get the following error:
> redis-cli -x RG.FUNCTION LOAD < ./lib.js
(error) Library lib already exists
We get the error because the library with the same name already exists, we can use the UPGRADE
argument to upgrade the library with the new code:
> redis-cli -x RG.FUNCTION LOAD UPGRADE < ./lib.js
OK
And now we can invoke my_ping
using RG.FUNCTION CALL
:
> redis-cli RG.FUNCTION CALL lib my_ping
"PONG"