1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- # -*- 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']
|