版权声明:本文为博主原创文章,未经博主允许不得转载。学习交流QQ群: 173124648 https://blog.csdn.net/u013126379/article/details/81262120
最近营销项目中需要通过pin或者ip限制用户的行为,编写了以下脚本:
//ip ====请求的ip limitCount ===限制次数 timeout===超时时间
public boolean limitAccess(String ip ,int limitCount, int timeout){
String script ="local key = \"limit:\" .. KEYS[1]\n" +
"local limit = tonumber(ARGV[1])\n" +
"local expire_time = ARGV[2]\n" +
"\n" +
"local is_exists = redis.call(\"EXISTS\", key)\n" +
"if is_exists == 1 then\n" +
" if redis.call(\"INCR\", key) > limit then\n" +
" return 0\n" +
" else\n" +
" return 1\n" +
" end\n" +
"else\n" +
" redis.call(\"SET\", key, 1)\n" +
" redis.call(\"EXPIRE\", key, expire_time)\n" +
" return 1\n" +
"end";
List<String> argv = Arrays.asList(String.valueOf(limitCount), String.valueOf(timeout));
return (Long)r2MCacheService.eval(script, ip, argv) == 1;
}
附上lua 学习地址:https://www.lua.org/home.html