[GO]go redis实现滑动窗口限流-redis版

上一篇是单机当前进程的滑动窗口限流 , 这一个是使用go redis list结构实现的滑动窗口限流 , 原理都一样 , 但是支持分布式

原理可以参考上一篇介绍

复制代码
func LimitFreqs(queueName string, count uint, timeWindow int64) bool {
    currTime := time.Now().Unix()
    length := uint(ListLen(queueName))
    if length < count {
        ListPush(queueName, currTime)
        return true
    }
    //队列满了,取出最早访问的时间
    earlyTime, _ := strconv.ParseInt(ListIndex(queueName, int64(length)-1), 10, 64)
    //说明最早期的时间还在时间窗口内,还没过期,所以不允许通过
    if currTime-earlyTime <= timeWindow {
        return false
    } else {
        //说明最早期的访问应该过期了,去掉最早期的
        ListPop(queueName)
        ListPush(queueName, currTime)
    }
    return true
}
复制代码

 

posted @   唯一客服系统开发笔记  阅读(1140)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-12-14 [PHP] 编译安装swoole
2019-12-14 [PHP] swoole直接使用二进制包
2019-12-14 [Go] 实现websocket服务端
点击右上角即可分享
微信分享提示
1
chat with us