我已开始研究并尝试了一下Lua,发现它非常适合用于获取键的范围。例如:
business:5:visits:2013-11-12
business:5:visits:2013-11-13
etc
使用Lua,我只需要向Redis发送一个命令而不是整个日期范围。
现在我正在考虑将更多的逻辑转换并移至Redis。
以我们当前的消息存储过程为例:
// create a new unique id
redisClient.incr(Config.messageId, function(err, reply) {
var messageId = reply.toString();
var timestmp = Date.now();
// push message
redisClient.zadd(Config.history + ':' + obj.uid + ':' + obj.channel.replace(/\s+/g, ''), timestmp, messageId);
// store the message data by messageId
redisClient.hmset(Config.messageHash + ':' + messageId, {
'user_id': obj.uid,
'text_body': "some text",
'text_date': timestmp,
});
// set expires
redisClient.expire(Config.history + ':' + obj.uid + ':' + obj.channel.replace(/\s+/g, ''), Config.messageExpire);
redisClient.expire(Config.messageHash + ':' + messageId, Config.messageExpire);
// add to mysql-sync queue
redisClient.RPUSH(Config.messageMySQLSyncQueue, Config.messageHash + ':' + messageId);
});
上述内容可以很容易地转换成Lua,但为了性能是否值得呢?
如果用Lua编写这个程序,只需要向Redis发出1条命令,会更快吗?这会导致阻塞其他命令吗?