如何成功将 Django 连接到 Azure Redis 缓存?

问题描述 投票:0回答:3

我有一个 Django 应用程序,刚刚从 Digital Ocean 迁移到 MS Azure,并且该应用程序在 Azure 上完美运行。但是,我正在努力使用 Azure Cache for Redis 服务实现缓存后端。

我在settings.py中有以下配置:

    CACHES = {
        "default": {  
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": f"redis://<my_redis_service_name>.redis.cache.windows.net:6380,password={secrets.AZURE_REDIS_PASSWORD},ssl=True,abortConnect=False",
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
                "COMPRESSOR": "django_redis.compressors.zlib.ZlibCompressor",
            },
        }
    }  

我已将我的 redis 服务名称替换为

<my_redis_service_name>

通过此设置和 DEBUG=True,我收到错误:

ValueError at /accounts/login/
Redis URL must specify one of the following schemes (redis://, rediss://, unix://)

奇怪,因为

redis://
在网址中。我已验证密钥,并确保 redis 服务防火墙接受我的虚拟机的 IP4 地址,并确保虚拟机上的端口 6380 已打开。我还尝试了连接字符串的各种排列,例如:

"LOCATION": f'redis://:{secrets.AZURE_REDIS_PASSWORD}@<my_redis_service_name>.redis.cache.windows.net:6380,ssl=True,abortConnect=False',

没有运气。如果相关的话,我正在使用 Django 4.0.7、Python 3.8、django-cachalot 和 jazzband 的 django-redis 包。 Azure Redis 缓存声明它使用 Redis 版本 6.0.14。就其价值而言,我的开发环境与位于

"LOCATION": "redis://127.0.0.1:6379/1",
的本地守护进程化 Redis 缓存配合得很好。任何帮助表示赞赏。

django azure redis
3个回答
2
投票

自 AZURE REDIS 上的

SSL is mandatory
起,您需要执行以下操作:

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        "LOCATION": 'rediss://YOUR_REDIS_HOST_NAME:YOUR_REDIS_PORT',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
            'PASSWORD': 'YOUR_REDIS_PASSWORD',
            'SSL': True
        }
    }
}

注意:正如 django_redis 自述文件中提到的,如果我们想要 SSL 连接,我们使用

rediss://


2
投票

在尝试了很多很多连接字符串和选项的排列之后,我终于找到了一个有效的版本:

"LOCATION": f"rediss://:{secrets.AZURE_REDIS_PASSWORD}@<my_redis_service_name>.redis.redis.cache.windows.net:6380/0",

请注意

rediss://
架构,其中 SSL 带有额外的“s”,类似于
HTTPS
,以及
:
之前的
{secrets.AZURE_REDIS_PASSWORD}
,通常跟在用户名后面(Azure redis 上没有用户名)。希望这对某人有帮助,因为在撰写本文时,我还没有找到使用 Azure redis 的 django redis 配置的记录示例。还在端口后添加
/0
表示默认的 redis 数据库。


0
投票

以上内容适用于 Django 5。

CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.redis.RedisCache"
        "LOCATION": f"rediss://:{AZURE_REDIS_CACHE_KEY}@redis-qa-ai-app.redis.cache.windows.net:6380/0"
    }
}

正如上面 Milo Persic 提到的,redis 有一个额外的 s。如果您错过了这一点,对 Redis 的调用将挂起并最终超时。

© www.soinside.com 2019 - 2024. All rights reserved.