memcache_backend.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import pickle
  4. from django.core.cache.backends.base import DEFAULT_TIMEOUT
  5. from django.core.cache.backends.memcached import BaseMemcachedCache
  6. from library import memcache
  7. class CustomizedMemcachedCacheBackend(BaseMemcachedCache):
  8. """为了使用修改过的兼容的memcache客户端,这里做django的适配层"""
  9. def __init__(self, server, params):
  10. super(CustomizedMemcachedCacheBackend, self).__init__(server, params,
  11. library = memcache,
  12. value_not_found_exception = ValueError)
  13. @property
  14. def _cache(self):
  15. # type:()->memcache.Client
  16. if getattr(self, '_client', None) is None:
  17. self._client = self._lib.Client(self._servers, pickleProtocol = pickle.HIGHEST_PROTOCOL, debug = False,
  18. cache_cas = True)
  19. return self._client
  20. def cas(self, key, value, cas = None, timeout = DEFAULT_TIMEOUT):
  21. key = self.make_key(key)
  22. return self._cache.cas(key, value, self.get_backend_timeout(timeout))
  23. def get(self, key, default = None, version = None, ignore_exc = True):
  24. key = self.make_key(key, version = version)
  25. val = self._cache.get(key, ignore_exc)
  26. if val is None:
  27. return default
  28. return val
  29. def gets(self, key, ignore_exc = True):
  30. key = self.make_key(key)
  31. value = self._cache.gets(key, ignore_exc)
  32. return value, None
  33. def delete(self, key, version = None):
  34. key = self.make_key(key, version = version)
  35. return self._cache.delete(key)
  36. __all__ = ['CustomizedMemcachedCacheBackend']