贴一个自己封装的通用lua执行器
代码语言:javascript复制 /**
* 通用lua脚本执行器
*
* @param luaStr lua脚本
* @param resType 返回值类型
* @param keys key值集合
* @param args 参数类型集合
* @return lua执行结果
* @author zyh */
<T> T commonLuaExecute(String luaStr, Class<T> resType, List<String> keys, Object... args);
脚本
代码语言:javascript复制 /**
* 机会购下单lua
hash 结构
flide为用户id
keys1 map的key
keys2 是filte 用户id
args1 是当前使用机会数
args2 是总使用机会数
value为购买次数(已使用机会数)
totalChanceCount 活动设置的总机会数
goodsCount 本次需要使用的机会数
* @author zyh
*/
public static final String LUA_ADD_BUY_RECORD_ADD_FOR_CHANCE =
"local buyCount=tonumber(redis.call('Hget',KEYS[1],KEYS[2]));"
"local goodsCount=tonumber(ARGV[1])"
"local totalChanceCount=tonumber(ARGV[2])"
" if (buyCount == nil) then "
" if(goodsCount<=totalChanceCount) then"
" redis.call('HINCRBY',KEYS[1],KEYS[2],goodsCount)"
" return 1;"
" else "
" return 0;"
" end"
" else "
" if((goodsCount buyCount)<=totalChanceCount) then"
" redis.call('HINCRBY',KEYS[1],KEYS[2],goodsCount)"
" return 1;"
" else "
" return 0;"
" end;"
" end;";