一组增强标准 Django 缓存体验的有用工具
项目描述
#Calm Cache for Django
`django-calm-cache` 让你的缓存保持平静,而你的网站正被
大量的流量冲击。
## 主要特点
* [Mint 缓存](http://djangosnippets.org/snippets/155/) 避免
[狗堆](http://en.wikipedia.org/wiki/Cache_stampede) 效果
* 超时抖动减少同时过期的条目数
* 与任何其他 Django 缓存后端一起工作
* `MemcachedCache` 和 `PyLibMCCache` Django 后端被扩展以支持
[python-memcached](ftp://ftp.tummy.com/pub) 提供的数据压缩/python-memcached/)
和 [pylibmc](http://sendapatch.se/projects/pylibmc/) 分别
* `PyLibMCCache` 被扩展以支持二进制协议
* `cache_response` 装饰器可以应用于任何 Django 视图并
有条件地缓存响应,就像 Django 标准 `CacheMiddleware`
和 `cache_page` 所做的那样,但更可配置、显式和可扩展
## 安装
:::shell
pip install hg+https://bitbucket.org/pitcrews/django-calm-cache/
### Cache Backends
更新 `settings.py` 中的缓存设置:
:::python
CACHES = {
'default ':{
'BACKEND':'calm_cache.backends.CalmCache',
'位置':'locmem-cache',
'KEY_FUNCTION':'calm_cache.contrib。sha1_key_func',
'OPTIONS': {
'MINT_PERIOD': '10', # 允许过时的结果持续这么多秒。默认值:0(关闭)
'GRACE_PERIOD':'120',#在此期间提供一次陈旧值。默认值:0(关闭)
'JITTER': '10', # 随机抖动的上限(以秒为单位)。默认值:0(关闭)
},
},
'locmem-cache': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'foo',
},
'zipped-memcached' :{
'BACKEND':'calm_cache.backends.MemcachedCache',
'位置':
'MIN_COMPRESS_LEN': 1024, # 压缩此大小或更大字节的值。默认值:0(禁用)
},
},
'zipped-bin-pylibmc':{ ' BACKEND
':'calm_cache.backends.PyLibMCCache',
'LOCATION':'127.0.0.1:11211','OPTIONS':{'MIN_COMPRESS_LEN ': 1024, # 压缩此大小或更大字节的值。默认值:0(禁用) 'BINARY':True,#为此后端启用二进制协议。默认值:False (Disabled) }, }, }现在放松一下,知道您的网站的缓存不会在出现持续流量的第一个迹象时崩溃。
`LOCATION` 参数定义了另一个“真实”的 Django 缓存后端的名称
,它将用于实际存储值
`CalmCache` 后端接受以下选项:
* `MINT_PERIOD`:在用户提供之后立即开始的时间段
或默认超时(`TIMEOUT` 设置)结束。
在此期间的第一个请求接收到 get() 未命中(`None` 或默认值)并
刷新该值,而所有其他请求都返回缓存(陈旧)
值,直到它被更新或过期。秒。默认值:`0`
* `GRACE_PERIOD`:薄荷延迟后开始的时间段。
在宽限期内,旧值仅返回一次,之后将被删除。
秒。默认值:`0`
* `JITTER`:定义
添加到客户端提供的“真实”缓存超时的“[0 ... JITTER]”随机值的范围。秒。默认值:`
0` #### CalmCache Guidelines
实际存储的键名由`CalmCache.make_key()`
和底层缓存的`make_key()`方法的输出组成,因此是堆叠的:
real_cache_prefix:calm_cache_prefix:
user_supplied_key为了应对高并发请求
,`MINT_PERIOD` 的良好值将与存储的对象重新生成时间相当。
宽限期在铸币延迟之后开始,并且在此期间出现
的第一个请求满足陈旧值。给定键下缓存的值
立即失效,下一个请求客户端将刷新并
存储一个新值。
当偶尔的陈旧是可以承受的时,这种技术可以提高不经常访问的数据的命中率。
为缓存对象的到期添加随机可变性,因为它们可能同时生成
,从而减轻到期同步
最大实际缓存 TTL 计算为
timeout + MINT_PERIOD + GRACE_PERIOD + JITTER
设置 `MINT_PERIOD`、`GRACE_PERIOD` 或 `JITTER`为“0”或根本不设置它们
会关闭代码中的相关逻辑。
#### CalmCache 限制
* `CalmCache` 当前仅支持缓存方法 `add`、`set`、`get`、`delete`、
`has_key` 和 `clear`
### 响应缓存
示例用法:
:::python
from Calm_cache.decorators import cache_response
@cache_response(15, key_prefix='my_view', codes=(200, 404))
def my_view(request, slug=None):
return HttpResponse()
`cache_response`' s 构造函数参数,相关的 Django 设置和
默认值:
* `cache_timeout`:整数,缓存条目的默认 TTL。必需
* `cache`:Django 缓存后端名称。
如果未指定,将使用默认缓存后端
* `key_prefix`:此字符串始终位于结果键的前面。
默认值:`''`。Django 设置:`CCRC_KEY_PREFIX`
* `methods`:具有可以缓存的请求方法的列表/元组。
默认值:`('GET', )`。Django 设置:`CCRC_CACHE_REQ_METHDODS`
* `codes`:具有可缓存响应代码的列表/元组。
默认值:`(200, )`。Django 设置:`CCRC_CACHE_RSP_CODES`
* `nocache_req`:以请求标头作为键,
正则表达式作为值(字符串或已编译)的字典,因此当请求
具有与表达式匹配的值的标头时,
从不缓存响应。标头应采用 WSGI 格式,
即“HTTP_X_FORWARDED_FOR”。默认值:`{}`。
* `nocache_rsp`:防止响应
被缓存的响应头列表。默认值:`('Set-Cookie', 'Vary')`。
Django 设置:`CCRC_NOCACHE_RSP_HEADERS`
* `anonymous_only`:布尔值,选择是否只
应从缓存/响应缓存中提供匿名请求。
默认值:“真”。Django 设置:`CCRC_ANONYMOUS_REQ_ONLY`
* `cache_cookies`:布尔值,如果为 False,则
不会缓存带有 cookie 的请求,否则会忽略 cookie。默认值:“假”。
Django 设置:`CCRC_CACHE_REQ_COOKIES`
* `excluded_cookies`:如果 `cache_cookies` 为 False,则在
此列表中找到的 cookie 将被忽略(视为未设置)。 如果 `cache_cookies` 为 True,如果在请求中找到列出的 cookie 之一,
则不会缓存响应。
默认值:`()`。
Django 设置:`CCRC_EXCLUDED_REQ_COOKIES`
* `include_scheme`:布尔值,选择是否应将请求方案(http
或 https)用于密钥。默认值:“真”。
Django 设置:`CCRC_KEY_SCHEME`
* `include_host`: boolean 选择请求
的 Host: 是否应该用于密钥。默认值:“真”。Django 设置:`CCRC_KEY_HOST`
* `hitmiss_header`:包含三个元素的元组:标题名称、
缓存命中值和缓存未命中值。
如果设置为“无”,则永远不会添加标头
默认值:“('X-Cache','Hit','Miss')''。Django 设置:`CCRC_HITMISS_HEADER`
* `key_function`:应该使用的可选可调用函数,而不是
内置键函数。
必须接受请求作为其唯一参数并返回
如果请求不应被缓存,则为带有键的字符串或“无”。
#### ResponseCache 特性和指南
* 与 `CacheMiddleware` 不同,`cache_response` 不会分析 `Cache-Control`
标头,也不会更改缓存 TTL。
标头与任何其他标头一样与响应一起缓存
* `cache_reponse` 的默认设置被选择为最安全的,但
为了获得更好的缓存性能,需要仔细配置
* 默认情况下,使用 `Set-Cookie` 响应和 `Vary` 标头永远不会被缓存,
具有 `Cookie` 标头的请求也不会被缓存
* 具有 CSRF 令牌的响应永远不会被缓存
*默认情况下,不会缓存已验证用户的请求
* URL 和主机名用于构建缓存键,这
对于某些缓存引擎来说可能是一个问题,因为它们对键字符和长度的限制。
建议您在缓存后端使用一些散列 `KEY_FUNCTION`,
例如,提供的 `calm_cache.contrib.sha1_key_func`
## Legals
License: BSD 3-clause
Copyright (c) 2014, Fairfax Media Limited
保留所有权利。
`django-calm-cache` 让你的缓存保持平静,而你的网站正被
大量的流量冲击。
## 主要特点
* [Mint 缓存](http://djangosnippets.org/snippets/155/) 避免
[狗堆](http://en.wikipedia.org/wiki/Cache_stampede) 效果
* 超时抖动减少同时过期的条目数
* 与任何其他 Django 缓存后端一起工作
* `MemcachedCache` 和 `PyLibMCCache` Django 后端被扩展以支持
[python-memcached](ftp://ftp.tummy.com/pub) 提供的数据压缩/python-memcached/)
和 [pylibmc](http://sendapatch.se/projects/pylibmc/) 分别
* `PyLibMCCache` 被扩展以支持二进制协议
* `cache_response` 装饰器可以应用于任何 Django 视图并
有条件地缓存响应,就像 Django 标准 `CacheMiddleware`
和 `cache_page` 所做的那样,但更可配置、显式和可扩展
## 安装
:::shell
pip install hg+https://bitbucket.org/pitcrews/django-calm-cache/
### Cache Backends
更新 `settings.py` 中的缓存设置:
:::python
CACHES = {
'default ':{
'BACKEND':'calm_cache.backends.CalmCache',
'位置':'locmem-cache',
'KEY_FUNCTION':'calm_cache.contrib。sha1_key_func',
'OPTIONS': {
'MINT_PERIOD': '10', # 允许过时的结果持续这么多秒。默认值:0(关闭)
'GRACE_PERIOD':'120',#在此期间提供一次陈旧值。默认值:0(关闭)
'JITTER': '10', # 随机抖动的上限(以秒为单位)。默认值:0(关闭)
},
},
'locmem-cache': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'foo',
},
'zipped-memcached' :{
'BACKEND':'calm_cache.backends.MemcachedCache',
'位置':
'MIN_COMPRESS_LEN': 1024, # 压缩此大小或更大字节的值。默认值:0(禁用)
},
},
'zipped-bin-pylibmc':{ ' BACKEND
':'calm_cache.backends.PyLibMCCache',
'LOCATION':'127.0.0.1:11211','OPTIONS':{'MIN_COMPRESS_LEN ': 1024, # 压缩此大小或更大字节的值。默认值:0(禁用) 'BINARY':True,#为此后端启用二进制协议。默认值:False (Disabled) }, }, }现在放松一下,知道您的网站的缓存不会在出现持续流量的第一个迹象时崩溃。
`LOCATION` 参数定义了另一个“真实”的 Django 缓存后端的名称
,它将用于实际存储值
`CalmCache` 后端接受以下选项:
* `MINT_PERIOD`:在用户提供之后立即开始的时间段
或默认超时(`TIMEOUT` 设置)结束。
在此期间的第一个请求接收到 get() 未命中(`None` 或默认值)并
刷新该值,而所有其他请求都返回缓存(陈旧)
值,直到它被更新或过期。秒。默认值:`0`
* `GRACE_PERIOD`:薄荷延迟后开始的时间段。
在宽限期内,旧值仅返回一次,之后将被删除。
秒。默认值:`0`
* `JITTER`:定义
添加到客户端提供的“真实”缓存超时的“[0 ... JITTER]”随机值的范围。秒。默认值:`
0` #### CalmCache Guidelines
实际存储的键名由`CalmCache.make_key()`
和底层缓存的`make_key()`方法的输出组成,因此是堆叠的:
real_cache_prefix:calm_cache_prefix:
user_supplied_key为了应对高并发请求
,`MINT_PERIOD` 的良好值将与存储的对象重新生成时间相当。
宽限期在铸币延迟之后开始,并且在此期间出现
的第一个请求满足陈旧值。给定键下缓存的值
立即失效,下一个请求客户端将刷新并
存储一个新值。
当偶尔的陈旧是可以承受的时,这种技术可以提高不经常访问的数据的命中率。
为缓存对象的到期添加随机可变性,因为它们可能同时生成
,从而减轻到期同步
最大实际缓存 TTL 计算为
timeout + MINT_PERIOD + GRACE_PERIOD + JITTER
设置 `MINT_PERIOD`、`GRACE_PERIOD` 或 `JITTER`为“0”或根本不设置它们
会关闭代码中的相关逻辑。
#### CalmCache 限制
* `CalmCache` 当前仅支持缓存方法 `add`、`set`、`get`、`delete`、
`has_key` 和 `clear`
### 响应缓存
示例用法:
:::python
from Calm_cache.decorators import cache_response
@cache_response(15, key_prefix='my_view', codes=(200, 404))
def my_view(request, slug=None):
return HttpResponse()
`cache_response`' s 构造函数参数,相关的 Django 设置和
默认值:
* `cache_timeout`:整数,缓存条目的默认 TTL。必需
* `cache`:Django 缓存后端名称。
如果未指定,将使用默认缓存后端
* `key_prefix`:此字符串始终位于结果键的前面。
默认值:`''`。Django 设置:`CCRC_KEY_PREFIX`
* `methods`:具有可以缓存的请求方法的列表/元组。
默认值:`('GET', )`。Django 设置:`CCRC_CACHE_REQ_METHDODS`
* `codes`:具有可缓存响应代码的列表/元组。
默认值:`(200, )`。Django 设置:`CCRC_CACHE_RSP_CODES`
* `nocache_req`:以请求标头作为键,
正则表达式作为值(字符串或已编译)的字典,因此当请求
具有与表达式匹配的值的标头时,
从不缓存响应。标头应采用 WSGI 格式,
即“HTTP_X_FORWARDED_FOR”。默认值:`{}`。
* `nocache_rsp`:防止响应
被缓存的响应头列表。默认值:`('Set-Cookie', 'Vary')`。
Django 设置:`CCRC_NOCACHE_RSP_HEADERS`
* `anonymous_only`:布尔值,选择是否只
应从缓存/响应缓存中提供匿名请求。
默认值:“真”。Django 设置:`CCRC_ANONYMOUS_REQ_ONLY`
* `cache_cookies`:布尔值,如果为 False,则
不会缓存带有 cookie 的请求,否则会忽略 cookie。默认值:“假”。
Django 设置:`CCRC_CACHE_REQ_COOKIES`
* `excluded_cookies`:如果 `cache_cookies` 为 False,则在
此列表中找到的 cookie 将被忽略(视为未设置)。 如果 `cache_cookies` 为 True,如果在请求中找到列出的 cookie 之一,
则不会缓存响应。
默认值:`()`。
Django 设置:`CCRC_EXCLUDED_REQ_COOKIES`
* `include_scheme`:布尔值,选择是否应将请求方案(http
或 https)用于密钥。默认值:“真”。
Django 设置:`CCRC_KEY_SCHEME`
* `include_host`: boolean 选择请求
的 Host: 是否应该用于密钥。默认值:“真”。Django 设置:`CCRC_KEY_HOST`
* `hitmiss_header`:包含三个元素的元组:标题名称、
缓存命中值和缓存未命中值。
如果设置为“无”,则永远不会添加标头
默认值:“('X-Cache','Hit','Miss')''。Django 设置:`CCRC_HITMISS_HEADER`
* `key_function`:应该使用的可选可调用函数,而不是
内置键函数。
必须接受请求作为其唯一参数并返回
如果请求不应被缓存,则为带有键的字符串或“无”。
#### ResponseCache 特性和指南
* 与 `CacheMiddleware` 不同,`cache_response` 不会分析 `Cache-Control`
标头,也不会更改缓存 TTL。
标头与任何其他标头一样与响应一起缓存
* `cache_reponse` 的默认设置被选择为最安全的,但
为了获得更好的缓存性能,需要仔细配置
* 默认情况下,使用 `Set-Cookie` 响应和 `Vary` 标头永远不会被缓存,
具有 `Cookie` 标头的请求也不会被缓存
* 具有 CSRF 令牌的响应永远不会被缓存
*默认情况下,不会缓存已验证用户的请求
* URL 和主机名用于构建缓存键,这
对于某些缓存引擎来说可能是一个问题,因为它们对键字符和长度的限制。
建议您在缓存后端使用一些散列 `KEY_FUNCTION`,
例如,提供的 `calm_cache.contrib.sha1_key_func`
## Legals
License: BSD 3-clause
Copyright (c) 2014, Fairfax Media Limited
保留所有权利。