- Lua Scripting on Redis (2.6+) is a killer feature
- But using them with NodeJs is painful
- We've to maintain lua script in JavaScript as string or load them via the filesystem manually
- If we are looking at network performance, we've to manually invoke
script load
andevasha
manually
- You can place lua script in a directory
- Just tell the
dirname
toscripto
, it will take care of lua scripts
var Scripto = require('redis-scripto');
var scriptManager = new Scripto(redisClient);
scriptManager.loadFromDir('/path/to/lua/scripts');
var keys = ['keyOne', 'keyTwo'];
var values = [10, 20];
scriptManager.run('your-script', keys, values, function(err, result) {
});
- By default
scripto
tries to load scripts into redis (viascript load
) - While scripts are loading, if a script invoked with
.run()
it will useeval
and send the plaintext lua script to redis - After scripts loaded, if a script invoked with
.run()
it will useevalsha
and does not send plaintext lua script - If the connection to redis dropped, it will remove shas and try again to load scripts once it back online
- if you need to send the plaintext lua script always. use
.eval()
method
scriptManager.eval('your-script', keys, values, function(err, result) {
});
- If you just need to load a single script, see following example
var scriptManager = new Scripto(redisClient);
scriptManager.loadFromFile('script-one', '/path/to/the/file');
scriptManager.run('script-one', [], [], function(err, result) {
});
- If you need to load scripts just using JavaScript (without loading from the filesystem), see following example.
var scripts = {
'script-one': 'return 1000'
};
var scriptManager = new Scripto(redisClient);
scriptManager.load(scripts);
scriptManager.run('script-one', [], [], function(err, result) {
});