app/django/core/cache/backends/memcached.py
changeset 54 03e267d67478
child 323 ff1a9aa48cfd
equal deleted inserted replaced
53:57b4279d8c4e 54:03e267d67478
       
     1 "Memcached cache backend"
       
     2 
       
     3 from django.core.cache.backends.base import BaseCache, InvalidCacheBackendError
       
     4 from django.utils.encoding import smart_unicode, smart_str
       
     5 
       
     6 try:
       
     7     import cmemcache as memcache
       
     8 except ImportError:
       
     9     try:
       
    10         import memcache
       
    11     except:
       
    12         raise InvalidCacheBackendError("Memcached cache backend requires either the 'memcache' or 'cmemcache' library")
       
    13 
       
    14 class CacheClass(BaseCache):
       
    15     def __init__(self, server, params):
       
    16         BaseCache.__init__(self, params)
       
    17         self._cache = memcache.Client(server.split(';'))
       
    18 
       
    19     def add(self, key, value, timeout=0):
       
    20         self._cache.add(key.encode('ascii', 'ignore'), value, timeout or self.default_timeout)
       
    21 
       
    22     def get(self, key, default=None):
       
    23         val = self._cache.get(smart_str(key))
       
    24         if val is None:
       
    25             return default
       
    26         else:
       
    27             if isinstance(val, basestring):
       
    28                 return smart_unicode(val)
       
    29             else:
       
    30                 return val
       
    31 
       
    32     def set(self, key, value, timeout=0):
       
    33         if isinstance(value, unicode):
       
    34             value = value.encode('utf-8')
       
    35         self._cache.set(smart_str(key), value, timeout or self.default_timeout)
       
    36 
       
    37     def delete(self, key):
       
    38         self._cache.delete(smart_str(key))
       
    39 
       
    40     def get_many(self, keys):
       
    41         return self._cache.get_multi(map(smart_str,keys))