0

最近我们从 django 的默认数据库会话切换到 memcached 会话。

我们一直在使用 contrib 会话模型来删除基于 session_key 的会话:https ://github.com/django/django/blob/master/django/contrib/sessions/models.py

Session.objects.get(session_key=key).delete()

一旦我们切换到 memcached 会话,上面的查询就会引发 DoesNotExist 异常。

Django 的 Session 模型是否可用于 memcached 会话?如果是这样,解决方案是什么?

4

2 回答 2

3

Django 提供了一个django.contrib.sessions.backends.cache会话后端,只要缓存配置正确,它就可以满足您的需求。

正如您自己所建议的那样,该Session模型由db后端使用。要使用cache后端,您可以执行以下操作(因此您可以继续使用 API 并使代码面向未来)。

from django.contrib.sessions.backends.cache import SessionStore
session = SessionStore(session_key)
session.delete()

这就是在Sessions 中间件中完成的方式。
无论后端如何,此方法都应该有效,如果您决定在未来移动到另一个后端,这可能是一种首选行为。

于 2012-10-25T20:10:39.090 回答
1
mc = memcache.Client(settings.CACHE_BACKEND[:-1].split('//')[1].split(';'))
mc.delete(str(key))
于 2012-10-25T20:58:51.093 回答