0

最近、django のデフォルト DB セッションから 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 のセッション モデルは 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 に答える