Flask-limiter如何查找其存储在Redis中的key名称
Flask-Limiter Redis 限流Key查询与清除方案
一、默认存储Key结构
Flask-Limiter 底层依赖limits库实现限流存储,Redis中默认的Key结构如下:{key_prefix}/{namespace}/{custom_rate_key}/{window_end_ts}
各字段含义:
key_prefix:初始化Limiter时通过key_prefix参数指定的值,默认是flask-limiternamespace:Redis存储的全局命名空间,未单独配置时默认是limitscustom_rate_key:你按用户维度限流时,自定义key生成函数返回的用户唯一标识(比如用户ID)window_end_ts:当前限流窗口的结束时间戳,单位为秒
二、快速定位对应用户的限流Key
- 直接在Redis中执行模糊匹配即可检索到指定用户的所有限流Key,示例命令:
KEYS *<目标用户唯一标识>*
注意:生产环境大Key场景下不要使用KEYS命令,建议用SCAN命令渐进式遍历匹配
- 也可以通过代码直接打印匹配规则,示例:
# 基于你已初始化的limiter实例 user_id = "要清除限流的用户ID" match_pattern = f"{limiter._key_prefix}/{limiter._storage.namespace}/{user_id}/*" print(f"目标用户限流Key匹配规则:{match_pattern}")
三、清除指定用户的限流Key
调用limits.storage的clear方法时,只需传入不带时间戳的前缀即可,方法会自动匹配清除该前缀下所有时间窗口的限流Key,示例:
# 前缀结构为 {key_prefix}/{namespace}/{custom_rate_key} clear_key = f"{limiter._key_prefix}/{limiter._storage.namespace}/{user_id}" limiter._storage.clear(clear_key)
内容的提问来源于stack exchange,提问作者Avid
相关产品推荐
相关产品推荐

