# -*- coding: utf-8 -*- # !/usr/bin/env python import pickle from django.core.cache.backends.base import DEFAULT_TIMEOUT from django.core.cache.backends.memcached import BaseMemcachedCache from library import memcache class CustomizedMemcachedCacheBackend(BaseMemcachedCache): """为了使用修改过的兼容的memcache客户端,这里做django的适配层""" def __init__(self, server, params): super(CustomizedMemcachedCacheBackend, self).__init__(server, params, library = memcache, value_not_found_exception = ValueError) @property def _cache(self): # type:()->memcache.Client if getattr(self, '_client', None) is None: self._client = self._lib.Client(self._servers, pickleProtocol = pickle.HIGHEST_PROTOCOL, debug = False, cache_cas = True) return self._client def cas(self, key, value, cas = None, timeout = DEFAULT_TIMEOUT): key = self.make_key(key) return self._cache.cas(key, value, self.get_backend_timeout(timeout)) def get(self, key, default = None, version = None, ignore_exc = True): key = self.make_key(key, version = version) val = self._cache.get(key, ignore_exc) if val is None: return default return val def gets(self, key, ignore_exc = True): key = self.make_key(key) value = self._cache.gets(key, ignore_exc) return value, None def delete(self, key, version = None): key = self.make_key(key, version = version) return self._cache.delete(key) __all__ = ['CustomizedMemcachedCacheBackend']