node-redis-embeded-lua
var redis = redisClient = redis;var redisEmbededLua = ; redisEmbededLua; var pack = redisClient;redisClient;
$ npm install redis-embeded-lua$ vi test.js$ node ./test.jsthe dbsize: 9 # maybe different from your system.
Usage
1: promotion
var pack = redisClient; redisClient;
2: promotion
var pack = redisClient;
$ vi test.js$ node ./test.jsthe result: bar_hello world
3: promotion
exports.PI = 3.14exports.mul = function(a,b) return a*bend
var pack = redisClient;
$ vi mathDemo.lua$ vi test.js$ node ./test.jsthe result: 254
4: promotion
var redis = redisClient = redis;var redisEmbededLua = ; redisEmbededLua; /* * Actually, `evalScript' must be called in a closure; * because, performance of `sha1pack' is expensive. * Yes, `run bussiness in closure' is the `original intention'. */var yourBussinessDBCount = { var pack = redisClient; return { return redisClient; }}; ;
$ vi test.js$ node ./test.jsthe dbsize: 9
or define `class':
{ thisclient = redisClient; redisEmbededLua; }YourBussinessprototypeset = { var script = redisClient; return { return thisclient; };}; YourBussinessprototypeget = { var script = redisClient; return { return thisclient; };};
5: promotion
TIP: If you use only one db in redis, ignore this section.
Although I don't like the multi-db design of redis, provide two method using reids-multi-dbs flexible.
If I were you, I would use only #0 db.
method 1:
redisClient;var pack = redisClient;
$ vi test.js$ node test.js[ 6, 1, 1, 3 ]
method 2:
exports = { DEFAULT = 0, USERINFO = 1, STATICS = 11, TEST = 15}
var pack = redisClient;
$ vi conf.lua$ vi test.js$ node test.js[ 1, 1, 3 ]
Installation
npm install redis-embeded-lua
LUA API
require('file')
require like nodejs. Only support one level(and in embeded lua).
call(fmt, ...)
printf(3) + redis.call + redis-cli
pcall(fmt, ...)
printf(3) + redis.pcall + redis-cli
select(db)
- select index
select(1)
- select dbname
redisClient.configDBName(conf)
, then select(dbname);
select('USERINFO')
return value
- success: nil
- fail: message
exists(key)
for examples:
exists('foo')
return true or false
Instead of the following
if redis.call('exists', 'foo') == 1 then return trueelse return falseend
JavaScirpt API
redisClient.evalScript(pack, arg1, arg2 ...)
- pack: object, return by
redisClient.sha1pack(script)
. required - arg1 - argn: arguments. optional
return Promise
redisClient.sha1pack(script)
- script: lua scirpt, string
return object
{ text:"lua script...", sha1:"sha1num"}
redisClient.configDBName(conf)
- conf object
{ DEFAULT: 0, USERINFO: 1}