django请求中存储的django缓存后端
django-in-request-cache的Python项目详细描述
Django缓存后端存储在Django请求中
安装
$ pip install django-in-request-cache
快速请求缓存
inrequestcache是django缓存接口的实现。 它使用分配给每个django请求对象的python dict实例来存储缓存值。 django-globals用于使请求对象在任何地方都可访问。 此缓存具有与标准django内存缓存相同的限制-不可能进行跨进程访问。 inrequestcache更进一步,使得跨线程访问变得不可能。 inrequestcache在每个请求中都不同。 inrequestcache应该比inmemory快,因为没有读/写锁。 对于在同一请求中可以多次访问的值,使用inrequestcache是有意义的。 缓存失效是很难的,但因为缓存只在请求期间存在,所以这不是一个大问题。
快速启动
将“django in request cache”添加到您的设置中,如下所示:
from django.conf.global_settings import CACHES as DEFAULT_CACHES CACHES = dict( DEFAULT_CACHES, cache_in_request={ 'BACKEND': 'django_in_request_cache.cache.InRequestCache', # 'LOCATION': '_dinr_cache', # request property name to store data # 'OPTIONS': { # # if set then no value is stored for more than MAX_TIME time. # 'MAX_TIMEOUT': 10, # in seconds, # }, }, )
将django globals中间件添加到您的设置中,如下所示:
MIDDLEWARE_CLASSES = [ ..., 'django_globals.middleware.Global', ]
用更快的缓存加速较慢的缓存
为什么要缓存缓存? 在我的例子中,redis缓存中有一个值,在同一个django请求期间访问了20次。 每次从redis读取需要大约1毫秒,它会使大约20毫秒只读取相同的值20次。 为了加快速度,我希望将我的值缓存在更快的缓存中(inrequestcache、inmemorycache等)。 cacheacache类是django缓存接口的实现,它允许从较慢的缓存读取值 只需一次,然后在更快的内存缓存中再次“缓存”它。 大多数情况下,较快的缓存是从较慢的缓存中重新填充的。在这种情况下,我们没有价值到期时的信息。 在这种情况下,缓存值的缓存最大过期时间为值过期时间+缓存慢速过期时间。 因此,应将快速缓存过期时间设置得非常低(以秒为单位)。
cacheacache配置
如何缓存速度较慢但跨进程的缓存后端:
from django.conf.global_settings import CACHES as DEFAULT_CACHES CACHES = dict( DEFAULT_CACHES, redis_cache = { 'BACKEND: 'redis_cache.RedisCache', ... }, cache_in_request={ 'BACKEND': 'django_in_request_cache.cache.InRequestCache', 'LOCATION': '_redis_cache_mirror', # request property name }, combined_in_request_and_redis_cache={ 'BACKEND': 'django_in_request_cache.cache.CacheACache', 'OPTIONS: { 'FAST_CACHE': 'cache_in_request', # cache alias 'FAST_CACHE_MAX_TIMEOUT': 5, # in seconds 'CACHE_TO_CACHE': 'redis_cache', # cache alias }, }, )
要求
- Django>;=1.6
- django-globals>;=0.2