You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看django-ratelimit在Redis服务器中存储的限流相关key?

配置正确性说明

你的基础配置逻辑是正常的,限流功能可正常运行就证明核心流程没有问题,查询不到缓存key是查询方式和key命名规则不匹配导致的。

找不到缓存key的两个核心原因
  • 你查询的Redis库不匹配:你Django配置中指定使用1号Redis库(LOCATION配置后缀为/1),但redis-cli默认连接的是0号库,查询前需要先切换库,执行命令:select 1
  • 你搜索的key名称错误:django-ratelimit不会存储名为ip的key,实际存储的key由多段拼接生成:
    1. Django全局缓存前缀:你配置的KEY_PREFIX: "my_app"
    2. Django缓存版本号:默认值为1
    3. django-ratelimit固定前缀:rl:
    4. 限流维度值:这里是实际请求的客户端IP,不是ip字符串
    5. 限流周期分片时间戳:用来统计对应时间窗口内的请求数
      最终完整key格式示例:my_app:1:rl:127.0.0.1:1718000000
缓存查询验证方法

Redis直接查询

127.0.0.1:6379> select 1
OK
127.0.0.1:6379> keys *rl*
1) "my_app:1:rl:127.0.0.1:1718000000"

Django Shell查询

Django的缓存接口会自动处理前缀拼接,直接搜索ratelimit特征前缀即可:

>>> from django.core.cache import cache
>>> cache.keys("*rl*")
['rl:127.0.0.1:1718000000']
生产环境适配建议

你的现有配置只要补充以下调整即可用于生产:

  • 在settings.py中显式添加配置RATELIMIT_USE_CACHE = 'default',避免依赖默认值导致后续版本升级出现异常
  • 如果你只需要限制POST请求,将装饰器的method参数修改为['POST']即可,当前配置会同时限制GET和POST请求
  • 确认限流拦截逻辑:django-ratelimit默认block=False,仅会给请求对象添加request.limited标记,不会主动拦截请求,如果你需要自动返回429响应,可以在装饰器中添加block=True参数,或者全局配置RATELIMIT_BLOCK = True

内容的提问来源于stack exchange,提问作者BK0090

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:36:03