使用 Elastic BeanStalk + Django 配置 ElastiCache Redis

9

另一个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",
        }
    }
}

我怀疑上述方法可能会在使用多个beanstalk服务器实例时出现问题。鉴于此,我倾向于使用MemCache而不是Redis,因为有一个专门用于与AWS Elasticache for Memcache交互的Django包:django-elasticache
谢谢, 安迪。
1个回答

14

简短回答:是的。

长话短说:我没有使用过Elastic Beanstalk,但我可以确认,如果你在ElastiCache中创建了一个Redis 实例(即集群模式已禁用),它将与django-redis很好地配合。只需将primary_endpoint插入你发布的Django配置中即可。

N.B. 如果您计划使用读取副本,请按以下方式设置:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": [
            "redis://<MASTER ENDPOINT>",
            "redis://<SLAVE ENDPOINT>",
        ]
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

如果您使用Redis 集群,则无法使用原生的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
      }
    }
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接