openrstry 限流 是否有清零逻辑 连接池
openrstry 限流 是否有清零逻辑
https://github.com/openresty/lua-resty-limit-traffic
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | # encoding=utf-8 # Shawn 2020/4/28 10:31 from asgiref.sync import async_to_sync class ABCBucketToken: def __init__(self): pass def connect_bucket(self): pass def refresh_token(self): pass def check_token(self): pass def disconnect_bucket(self): pass def __del__(self): pass class BizBucketToken(ABCBucketToken): factory_req_id = lambda k: 'BizBucketToken.' + k class_var_bucket_created = False def __init__(self, req_id='anonymoususer', limit=16, window_second=32): self.req_id = BizBucketToken.factory_req_id(req_id) self.limit = limit self.window_second = window_second # TODO self.connect_bucket() @classmethod def connect_bucket(cls): if cls.class_var_bucket_created: return # TODO cnf # TODO check alive def get_redis_conf(): return 'redis://:pwd@rcs.com:6379/2' async def create_redis_pool(i: str): import aioredis pool = await aioredis.create_redis_pool(i) return pool redis_conf = get_redis_conf() redis_pool = async_to_sync(create_redis_pool)(redis_conf) cls.bucket = redis_pool cls.class_var_bucket_created=True def handle_token(self): to_throttle = False pttl = async_to_sync(self.bucket.pttl)(self.req_id) if pttl == -2: async_to_sync(self.bucket.set)(self.req_id, self.limit) async_to_sync(self.bucket.pexpire)(self.req_id, self.window_second * 1000) elif pttl == -1: async_to_sync(self.bucket.pexpire)(self.req_id, self.window_second * 1000) elif pttl == 0: # TODO pass elif pttl > 0: r = async_to_sync(self.bucket.get)(self.req_id) r = int(r) if r >= 1: async_to_sync(self.bucket.set)(self.req_id, r - 1) else: to_throttle = True return to_throttle def disconnect_bucket(self): pass def __del__(self): pass if __name__ == 'main': pass |
连接池
uid = get_uid(request)
BizBucketToken.connect_bucket()
r = BizBucketToken(req_id=uid, limit=160, window_second=32)
to_throttle = r.handle_token()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2018-05-31 视频重复性 校验
2018-05-31 键值对 取值