1 from cPickle import loads, dumps
3 from django.contrib.sessions.backends.base import SessionBase, CreateError
4 from django.conf import settings
8 class SessionStore(SessionBase):
10 A redis-based session store.
12 def __init__(self, session_key=None):
13 self.redis = redis.Redis(
14 host=getattr(settings, "REDIS_HOST", None),
15 port=getattr(settings, "REDIS_PORT", None),
16 timeout=getattr(settings, "REDIS_TIMEOUT", None),
17 db=getattr(settings, "REDIS_DB", None))
19 super(SessionStore, self).__init__(session_key)
22 session_data = self.redis.get(self.session_key)
23 if session_data is not None:
24 return loads(session_data)
30 self.session_key = self._get_new_session_key()
32 self.save(must_create=True)
34 # Would be raised if the key wasn't unique
39 def save(self, must_create=False):
41 # preserve=True -> SETNX
42 result = self.redis.set(
43 self.session_key, dumps(self._get_session(no_load=must_create)), preserve=True)
44 if result == 0: # 0 == not created, 1 == created.
47 self.redis.set(self.session_key, dumps(self._get_session(no_load=must_create)),)
49 def exists(self, session_key):
50 if self.redis.exists(session_key):
54 def delete(self, session_key=None):
55 if session_key is None:
56 if self._session_key is None:
58 session_key = self._session_key
59 self.redis.delete(session_key)