golang 重复提交和流量限制

写的比较粗糙,有错误的地方希望指正,不会英语,部分变量用拼音命名,打扰了
//LimitInfo 限制对象
type LimitInfo struct {
    Time      int64
    Count     int64
    Name      string
    LimitType int    //1 流量控制,2 并发控制
    LimitKey  string //限制key
}


//Limit 限制方法
func (l *LimitInfo) Limit() bool {
    limit := true
    key := "limit-key-" + l.LimitKey
    c := redisutil.Pool.Get()
    defer c.Close()
    result, errRedis := c.Do("Incr", key)
    if errRedis != nil {
        log.Info(l.Name, " ,key:", key, ", errRedis=[", errRedis, "]")
        limit = false
    }
    count, errorcase := redis.Int64(result, nil)
    if errorcase != nil {
        log.Info(l.Name, " ,key:", key, " ,errorcase=[", errorcase, "]")
        limit = false
    }
    if l.LimitType == 1 { //LimitType 1 是流量控制
        if count == 1 {
            if _, errExpire := c.Do("expire", key, l.Time); errExpire != nil {
                log.Info(l.Name, " ,key:", key, " ,errExpire=[", errExpire, "]")
                limit = false
            }
        }
    } else if l.LimitType == 2 { //LimitType 2 是并发控制,防重复提交
        if _, errExpire := c.Do("expire", key, l.Time); errExpire != nil {
            log.Info(l.Name, " ,key:", key, " ,errExpire=[", errExpire, "]")
            limit = false
        }
    } else {
        //未做限制
        limit = true
    }
    if count > l.Count {
        limit = false
        log.Info(l.Name, " ,key:", key, " ,err=[out limit] ,limit:", l.Count)
    }
    return limit
}

使用

redisutil.Pool = redisutil.NewPool(*redisutil.RedisServer)
    info := &LimitInfo{
        //10秒
        Time:      10,
        Count:     10,
        Name:      "请求限制0001",
        LimitType: 1,
        LimitKey:  "aaronwei-tensec-",
    }
    info.Limit()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • abandon, desert, forsake, leave, give up abandon :强调永远或完全...
    sunxiaohang阅读 2,406评论 0 3
  • 第一部分 打好基础 Laying the Foundation 第一章 欢迎进入软件构建的世界 Welcome t...
    白桦叶阅读 4,695评论 0 17
  • Max和陆飞PK之后, 虽然输赢仅是一票之差,但Max的小组全部都是他最近从各大酒店挖来的精英,而陆飞的小组却是杂...
    楚云风飞阅读 552评论 4 5
  • 前段时间因为要和孩子完成一份手抄报,握笔的那一刻觉得浑身不自在,究其原因,是在网络与通信如此发达的今天,手...
    00随随阅读 1,078评论 0 0
  • 不想拿死工资选择下班后做副业,先要学会个人定位,秘诀都在这里 time刚刚好 time专注分享两件事:一是自我提升...
    子云生阅读 433评论 0 0