zoukankan      html  css  js  c++  java
  • 基于redis+lua实现的分布式限流

    public class Console {

    public static void main(String[] args) {
        Config config = new Config();
        config.setLockWatchdogTimeout(10000);
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
        RedissonClient redissonClient = Redisson.create(config);
    
        List<Object> keys = new ArrayList<>();
        keys.add("txk");
        Object[] values=new Object[]{1};
        Object eval = redissonClient.getScript().eval(READ_WRITE, RedisLua.LIMIT_LUA_STRING, RScript.ReturnType.INTEGER, keys, values);
        System.out.println(eval);
    
    }
    
    
    static class RedisLua {
    
        public static final String LIMIT_LUA_STRING;
    
        static {
            StringBuilder limitLuaString =new StringBuilder();
            limitLuaString.append(" local key = KEYS[1]");
            limitLuaString.append("
    local limit = tonumber(ARGV[1])");
            limitLuaString.append("
    local curentLimit = tonumber(redis.call('get', key) or "0")");
            limitLuaString.append("
    if curentLimit + 1 > limit then");
            limitLuaString.append("
    return 0");
            limitLuaString.append("
    else");
            limitLuaString.append("
     redis.call("INCRBY", key, 1)");
            limitLuaString.append("
    redis.call("EXPIRE", key, ARGV[2])");
            limitLuaString.append("
    return curentLimit + 1");
            limitLuaString.append("
    end");
            LIMIT_LUA_STRING=limitLuaString.toString();
        }
    }
    

    }

  • 相关阅读:
    41:和为S的两个数
    40:数组中只出现一次的数字
    39-2:平衡二叉树
    39:二叉树的深度
    38:数字在排序数组中出现的次数
    37:两个链表的第一个公共结点
    36:数组中的逆序对
    35:第一个只出现一次的字符
    34:丑数
    33:把数组排成最小的数
  • 原文地址:https://www.cnblogs.com/merciless/p/14201332.html
Copyright © 2011-2022 走看看