【问题标题】:How to see keys set by django-ratelimit in redis server?如何在 redis 服务器中查看 django-ratelimit 设置的密钥?
【发布时间】:2021-11-25 03:44:00
【问题描述】:

我正在使用以下

django==3.1.3
django-ratelimit==3.0.1
django-redis==4.12.1
djangorestframework==3.12.2

我正在尝试设置速率限制以限制调用 POST 请求的次数。

我的设置中有这个:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        },
        "KEY_PREFIX": "my_app"
    }
}

我在views.py 有这个。 (非常简化的版本)

@ratelimit(key='ip', rate='1/5m', method=['GET', 'POST'])
def rate_limit_func(request):
     if request.method == 'POST':
        return Response(status='200')

速率限制按预期工作。但我看不到任何密钥存储在 redis 服务器中

127.0.0.1:6379> ping
PONG
127.0.0.1:6379> get ip
(nil)
127.0.0.1:6379> keys *
(empty list or set)

我也尝试使用 django shell 搜索密钥

>>> from django.core.cache import cache
>>> 'ip' in cache
False

我不确定我是否已正确设置它并且它是否可以在生产中使用。另外,缓存值在哪里设置?

【问题讨论】:

    标签: django django-rest-framework redis django-redis


    【解决方案1】:

    我看错地方了。默认情况下,redis 的数据库索引从 0 到 15。在我的 Django settings.py 中,我使用索引为 1 的数据库作为缓存。我可以使用redis-cli -n -1 选择该数据库。所以,

    ➜ redis-cli -n 1
    127.0.0.1:6379[1]> keys *
    

    这给了我django-ratelimit 存储的密钥列表

    This StackOverflow 的回答帮助我解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2017-10-08
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      相关资源
      最近更新 更多