Notice: this module is under heavy development and not yet ready for production. Also, a great part of the js syntax is not yet supported.
This is an interface for transpiling Javascript functions to Lua code and running them on the Redis scripting engine.
It is designed to work as a companion to the excellent node_redis
module, although it is of course possible to use it with any other redis client library.
Install with:
npm install redis-function
Simple example, included as example.js:
var redis = require('redis'),
RedisFunction = require('redis-function');
RedisFunction.mixin(redis.RedisClient);
function compareAndDelete (key, cmp) {
'use redis';
var val = this.call('get', key);
if (val == cmp) {
this.call('del', key);
}
return val;
}
var client = redis.createClient();
client.set('foo', 'bar', redis.print);
client.eval(compareAndDelete, 1, 'foo', 'baz', redis.print);
client.eval(compareAndDelete, 1, 'foo', 'bar', redis.print);
client.quit();
This will display:
Reply: OK
Reply: bar
Reply: bar
Compiles the given function to lua code, and executes it on the redis scripting engine.
Replaces the RedisClient.eval
method with one which intercepts calls that pass Function
objects, and compiles the function on-the-fly to lua code.
Compiles the given function to lua code, and returns an object which represents the compiled lua script.
Executes the function on the redis scripting engine.
The name of the function that was compiled. In the simple example (above), it equals 'compareAndDelete'
.
The number of key parameters that should be passed to the function.
The lua code the function was transpiled to.
The SHA-1 hash of the lua code. You can use this with the redis EVALSHA
command. Note, however, that RedisClient
already handles this for you, and there is no need to do it manually.
Convenience method for RedisFunction(fn, arity).eval(redisClient, args..., cb)
.