在使用hiredis的时候发现直接使用cmd调用eval的时候内嵌lua脚本会产生错误,
char cmd[] = "eval \"local a=redis.call('get',KEYS[1]);if a~='1' then redis.call('set',KEYS[1],'1');return 1;else return 0;end\" 1 UserLock:%s";
redisReply *reply = (redisReply*)redisCommand(c, cmd, "zhangsan");
在这个代码中redisCommand在解析cmd中的参数的时候用空格作为分割,导致语句解析错误,导致eval无法正常执行。
解决方案:
取消自己拼成完整的cmd命令,可变参数直接给 redisCommand传参,这样走的是redisCommand的格式转换,就不会有空格分隔导致解析错误的情况发生了。
char cmd[] = "local a=redis.call('get',KEYS[1]);if a~='1' then redis.call('set',KEYS[1],'1');return 1;else return 0;end";
reply = (redisReply*)redisCommand(c, "eval %s 1 UserLock:%s", cmd, "zhangsan");