A Redis module that allows running a JS functions inside the Redis processes. The JS
code is execute use V8 JS
engine.
Notice, RedisGears 2.0 is still under active development and not yet GA, the API might (and probably) change at the final GA version.
docker run -p 6379:6379 redislabs/redisgears:edge
Run the following on the main directory:
> docker build -t redisgears2 .
Then run the built image:
> docker run -p 6379:6379 redisgears2
See the build page for more information.
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.registerFunction('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 TFUNCTION LOAD
command:
> redis-cli -x TFUNCTION LOAD < ./lib.js
OK
And now we can execute our function using TFCALL
command, the command gets the library name and the function name:
> redis-cli TFCALL lib hello_world 0
"hello_world"
Notice that TFCALL
command arguments is very close to Redis FCALL
command, the only difference is that on RedisGears the command also gets the library name. The 0
represent the number of keys that will follow (which in our case is 0
).
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.registerFunction('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 TFUNCTION 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 REPLACE
argument to replace the library with the new code:
> redis-cli -x TFUNCTION LOAD UPGRADE < ./lib.js
OK
And now we can invoke my_ping
using TFCALL
:
> redis-cli TFCALL lib my_ping 0
"PONG"