diff options
Diffstat (limited to 'webapp/django/core/cache/backends/memcached.py')
-rw-r--r-- | webapp/django/core/cache/backends/memcached.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/webapp/django/core/cache/backends/memcached.py b/webapp/django/core/cache/backends/memcached.py new file mode 100644 index 0000000000..beb8844ec1 --- /dev/null +++ b/webapp/django/core/cache/backends/memcached.py @@ -0,0 +1,47 @@ +"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() + |