You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.4 KiB
47 lines
1.4 KiB
"Memcached cache backend" |
|
|
|
from django.core.cache.backends.base import BaseCache, InvalidCacheBackendError |
|
from django.utils.encoding import smart_unicode, smart_str |
|
|
|
try: |
|
import cmemcache as memcache |
|
except ImportError: |
|
try: |
|
import memcache |
|
except: |
|
raise InvalidCacheBackendError("Memcached cache backend requires either the 'memcache' or 'cmemcache' library") |
|
|
|
class CacheClass(BaseCache): |
|
def __init__(self, server, params): |
|
BaseCache.__init__(self, params) |
|
self._cache = memcache.Client(server.split(';')) |
|
|
|
def add(self, key, value, timeout=0): |
|
if isinstance(value, unicode): |
|
value = value.encode('utf-8') |
|
return self._cache.add(smart_str(key), value, timeout or self.default_timeout) |
|
|
|
def get(self, key, default=None): |
|
val = self._cache.get(smart_str(key)) |
|
if val is None: |
|
return default |
|
else: |
|
if isinstance(val, basestring): |
|
return smart_unicode(val) |
|
else: |
|
return val |
|
|
|
def set(self, key, value, timeout=0): |
|
if isinstance(value, unicode): |
|
value = value.encode('utf-8') |
|
self._cache.set(smart_str(key), value, timeout or self.default_timeout) |
|
|
|
def delete(self, key): |
|
self._cache.delete(smart_str(key)) |
|
|
|
def get_many(self, keys): |
|
return self._cache.get_multi(map(smart_str,keys)) |
|
|
|
def close(self, **kwargs): |
|
self._cache.disconnect_all() |
|
|
|
|