A Redis module that allows running a JS functions inside the Redis processes. The JS
code is execute use V8 JS
engine.
Notice, Triggers and Functions is still under active development and not yet GA. The API might (and probably will) 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 exposed by the module is very similar to the way Redis Functions work. Let's write a simple hello world
function that returns the string hello world
:
#!js name=lib api_version=1.0
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 in the file lib.js
, we can register our function in Redis using the 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 .
separated:
> redis-cli TFCALL lib.hello_world 0
"hello_world"
Notice that the TFCALL
command arguments are very close to the Redis FCALL
command arguments. The only difference is that, for Triggers and Functions, the command also requires the library name. The 0
represents the number of keys that will follow, which in our case is 0
.
It is possible to call Redis commands inside Triggers and Functions. The function gets as the first argument a client object that allows interaction with Redis using the call
function. The following example executes a simple PING
command and returns the result:
#!js name=lib api_version=1.0
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"