首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django会话在Redis实现后停止工作。

Django会话在Redis实现后停止工作。
EN

Stack Overflow用户
提问于 2016-03-07 11:17:28
回答 1查看 1.5K关注 0票数 2

我已经使用这个链接实现了redis,在这个会话之后,必须存储在db安装的redis中。当我重新启动我的应用程序时,配置之后。我的会话出现了错误。

例如,假设在函数A中,我声明了一个会话,当我从浏览器访问另一个链接并试图获取相同的会话时,该会话就不在那里了。甚至不存在会话键。request.session.keys()是空的。

这是我的redis配置:

缓存服务器设置

代码语言:javascript
复制
REDIS_PROT = "redis://"
REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
REDIS_DB = 0

REDIS_CACHE_SERVER = REDIS_PROT + REDIS_HOST + ":" + str(REDIS_PORT) + "/" + str(REDIS_DB)
REDIS_CACHEALOT_SERVER = REDIS_PROT + REDIS_HOST + ":" + str(REDIS_PORT) + "/" + str(REDIS_DB + 3)

DJANGO_REDIS_IGNORE_EXCEPTIONS = True

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": REDIS_CACHE_SERVER,
        "OPTIONS": {
            "PARSER_CLASS": "redis.connection.HiredisParser",
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "COMPRESS_MIN_LEN": 10,
            "SOCKET_CONNECT_TIMEOUT": 5,  # in seconds
            "SOCKET_TIMEOUT": 5,  # in seconds
        }
    },
    "cachealot": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": REDIS_CACHEALOT_SERVER,
        "OPTIONS": {
            "PARSER_CLASS": "redis.connection.HiredisParser",
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "COMPRESS_MIN_LEN": 10,
            "SOCKET_CONNECT_TIMEOUT": 5,  # in seconds
            "SOCKET_TIMEOUT": 5,  # in seconds
        }
    }
}

# CacheALot service settings 

CACHALOT_ENABLED = True
CACHALOT_CACHE   = 'cachealot'

# Django Redis Session App Configuration 

SESSION_REDIS_HOST = REDIS_HOST
SESSION_REDIS_PORT = REDIS_PORT
SESSION_REDIS_DB = REDIS_DB + 4
#SESSION_REDIS_PASSWORD = 'password'
SESSION_REDIS_PREFIX = 'session'

SESSION_ENGINE = 'redis_sessions.session'
# If you prefer domain socket connection, you can just add this line instead of SESSION_REDIS_HOST and SESSION_REDIS_PORT.
#SESSION_REDIS_UNIX_DOMAIN_SOCKET_PATH = '/var/run/redis/redis.sock'

# Celery Configurations
REDIS_CELERY_BROKER_SERVER =  REDIS_PROT + REDIS_HOST + ":" + str(REDIS_PORT) + "/" + str(REDIS_DB + 1)
REDIS_CELERY_RESULT_SERVER = REDIS_PROT + REDIS_HOST + ":" + str(REDIS_PORT) + "/" + str(REDIS_DB + 2)

BROKER_URL = REDIS_CELERY_BROKER_SERVER
CELERY_RESULT_BACKEND = REDIS_CELERY_RESULT_SERVER
CELERY_ALWAYS_EAGER=False

知道我为什么会收到django会话的关键错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-09 14:27:50

似乎您为启用缓存会话而做的事情太多了。除了使用django-redis-会议姜戈-卡恰洛之外,为什么还要使用姜戈红

让我们用一个最小的配置来简化,这个配置对我来说是有效的,只使用姜戈红。我在跟踪他们的向导Django关于设置会议的文档使用缓存会话

代码语言:javascript
复制
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

就是这样,通过请求视图和检查request.session来测试它,或者,如果您是在请求之外,使用会话存储

代码语言:javascript
复制
>>> from django.contrib.sessions.backends.cache import SessionStore
>>> s = SessionStore(session_key='ff882814010ccbc3c870523934fee5a2')
>>> s.save()
>>> s.session_key
'ff882814010ccbc3c870523934fee5a2'
>>> s.session_data
'KGRwMQpTJ19hdXRoX3VzZXJfaWQnCnAyCkkxCnMuMTExY2ZjODI2Yj...'
>>> s.get_decoded()
{'user_id': 42}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35842321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档