zoukankan      html  css  js  c++  java
  • C# RedisRateLimiter

    public class RedisRateLimiter
    {
        private static Logger LOG = LogManager.GetLogger("redis-limiter");
    
        private static readonly string TIME_KEY = "TIME_KEY";
        private static readonly string COUNTER_KEY = "COUNTER_KEY";
    
        public int MaxLimitNum { get; set; }
    
        public RedisRateLimiter(int maxLimitNum)
        {
            this.MaxLimitNum = maxLimitNum;
        }
    
        public bool CheckLimit()
        {
            using (var redisClient = RedisUtil.GetClient())
            {
                if (!redisClient.ContainsKey(TIME_KEY))
                {
                    LOG.Debug("Key Exp");
                    redisClient.Set<int>(TIME_KEY, 0, TimeSpan.FromSeconds(1));
                    redisClient.Set<long>(COUNTER_KEY, 0, TimeSpan.FromSeconds(1));
                }
    
                if (redisClient.ContainsKey(TIME_KEY))
                {
                    var current = redisClient.IncrementValue(COUNTER_KEY);
                    if (current > MaxLimitNum)
                    {
                        LOG.Error("限流成功,当前值: {0}, 限制最大值:{1}", current, MaxLimitNum);
                        return false;
                    }
    
                }
            }
            return true;
        }
    }
    
  • 相关阅读:
    2019-2020-1 20199302《Linux内核原理与分析》第九周作业
    MySQL 优化
    ElasticSearch实战
    redis实战
    ElasticSearch
    Zookeeper
    redis
    Jenkins 持续交付
    JDK 1.8 新特性之Stream
    cat-监控系统
  • 原文地址:https://www.cnblogs.com/byxxw/p/10172038.html
Copyright © 2011-2022 走看看