app/django/core/cache/backends/memcached.py
author Lennard de Rijk <ljvderijk@gmail.com>
Fri, 23 Jan 2009 17:07:54 +0000
changeset 928 df051fc9d7a1
parent 323 ff1a9aa48cfd
permissions -rw-r--r--
Replaced the boolean properties in soc/models/request.py with a state property. new : new Request group_accepted : The group has accepted this request completed : This request has been handled either following a creation of the role entity rejected : This request has been rejected by either the user or the group ignored : The request has been ignored by the group and will not give the user access to create the role Patch by: Lennard de Rijk Reviewed by: to-be-reviewed

"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()