Redis的Lua
2022-01-19 本文已影响0人
名字是乱打的
贴一个自己封装的通用lua执行器
/**
* 通用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);
脚本
/**
* 机会购下单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;";