• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

使用jedis执行lua脚本

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

转:

使用jedis执行lua脚本(实现一个对IP的限流)

上一篇学习了怎么安装lua,这一篇学习编写一个lua脚本用jedis执行,实现对一个IP的限流

LUA脚本如下,第一次使用incr对KEY(某个IP作为KEY)加一,如果是第一次访问,使用expire设置一个超时时间,这个超时时间作为Value第一个参数传入,如果现在递增的数目大于输入的第二个Value参数,返回失败标记,否则成功。redis的超时时间到了,这个Key消失,又可以访问啦。

package redis;

import java.util.Arrays;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;


public class LuaTest {

    public static void main(String[] args) {

        JedisPool jedisPool = new JedisPool("127.0.0.1", 6379);
        Jedis jedis = jedisPool.getResource();
        try {
             String lua = "local num = redis.call('incr', KEYS[1])\n" +
                        "if tonumber(num) == 1 then\n" +
                        "\tredis.call('expire', KEYS[1], ARGV[1])\n" +
                        "\treturn 1\n" +
                        "elseif tonumber(num) > tonumber(ARGV[2]) then\n" +
                        "\treturn 0\n" +
                        "else \n" +
                        "\treturn 1\n" +
                        "end\n";
             /**
                local num = redis.call('incr', KEYS[1])
                if tonumber(num) == 1 then
                    redis.call('expire', KEYS[1], ARGV[1])
                    return 1
                elseif tonumber(num) > tonumber(ARGV[2]) then
                    return 0
                else 
                    return 1
                end
             */
             
            Object result = jedis.evalsha(jedis.scriptLoad(lua), Arrays.asList("localhost"), Arrays.asList("10", "2"));
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (jedis != null) {
                try {
                    jedis.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
        
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
使用Nginx+Lua(OpenResty)开发高性能Web应用发布时间:2022-07-22
下一篇:
openresty使用lua-resty-shell执行shell脚本发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap