使用 Elastic BeanStalk + Django 设置 ElastiCache Redis

and*_*dyw 8 django amazon-web-services redis amazon-elasticache amazon-elastic-beanstalk

另一个 stackoverflow答案说您需要设置一个 elasticache.config 文件来自动使用 ElastiCache 创建 Redis 服务器。

但是,我可以在 AWS (Elasticache) 上创建一个 Redis 实例并将其端点添加到 Django 设置中吗?例如,使用Django-redis

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://<REDIS AWS ENDPOINT AND PORT HERE>",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我怀疑上述内容可能会导致多个 beanstalk 服务器实例出现问题。鉴于此,我倾向于使用 MemCache 而不是 Redis,因为有一个明确编写的 Django 包用于与 AWS Elasticache for Memcache 交互:django-elasticache

谢谢,安迪。

Rut*_*ijf 8

简短的回答:是的。

长答案:我没有使用过 Elastic Beanstalk,但是我可以确认,如果您在 ElastiCache 中创建一个 Redis实例(即:禁用集群模式),它将与django-redis. 只需将 插入primary_endpoint到您发布的 Django 配置中即可。

注意如果您打算使用只读副本,请按如下方式设置:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": [
            "redis://<MASTER ENDPOINT>",
            "redis://<SLAVE ENDPOINT>",
        ]
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您启动 Redis集群,则不能使用 vanilla django-redis。你必须按照这篇文章中的redis-py-cluster描述使用它。复制到这里:

CACHES = {
  'default': {
    'BACKEND': 'django_redis.cache.RedisCache',
    'LOCATION': 'redis://XXX.YYY.ZZZ.cache.amazonaws.com/0',
    'OPTIONS': {
      'REDIS_CLIENT_CLASS': 'rediscluster.RedisCluster',
      'CONNECTION_POOL_CLASS': 'rediscluster.connection.ClusterConnectionPool',
      'CONNECTION_POOL_KWARGS': {
        'skip_full_coverage_check': True # AWS ElasticCache has disabled CONFIG commands
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)