cherrypy.lib.缓存模块¶
Cherrypy实现了一个简单的缓存系统作为一个可插拔的工具。此工具尝试成为(进程内)HTTP/1.1兼容的缓存。它还不完全在那里,但对大多数网站来说可能已经足够好了。
通常,get响应被缓存(与选择头一起),并且,如果对同一资源的另一个请求到达,缓存工具将返回304 not modified(如果可能),或者以其他方式服务缓存的响应。如果为缓存的表示提供服务,它还将request.cached设置为true,并将request.cacheable设置为false(这样它就不会再次被缓存)。
如果对缓存的资源发出POST、PUT或DELETE请求,则这些请求会使任何缓存的响应失效(删除)。
使用¶
配置文件示例:
[/]
tools.caching.on = True
tools.caching.delay = 3600
您可以使用默认类以外的类 MemoryCache
通过提供配置条目 cache_class
;提供替换类的完整虚线名称作为配置值。它必须实现基本方法 get
, put
, delete
和 clear
.
通过在config中提供任何属性(包括重写方法),可以在缓存实例上设置这些属性。上面设置了 delay
例如,属性。
- class cherrypy.lib.caching.MemoryCache[源代码]¶
-
内存中的缓存,用于改变响应内容。
self.store中的每个键都是一个URI,每个值都是一个反stampedecache。任何给定的URI的响应可能会根据“选择请求头”的值而变化,即那些在vary响应头中命名的值。我们假定在应用程序的整个生命周期中每个URI的头名称列表都是常量,并将该列表存储在
self.store[uri].selecting_headers
.中包含的项目
self.store[uri]
具有键,这些键是请求头值的元组(顺序与选择头中的名称相同),以及实际响应的值。- antistampede_timeout = 5¶
等待其他线程释放缓存锁的秒数。
- debug = False¶
- delay = 600¶
缓存内容过期前的秒数;默认值为600(10分钟)。
- expire_freq = 0.1¶
缓存过期扫描之间的休眠秒数。
- maxobj_size = 100000¶
每个缓存对象的最大大小(以字节为单位);默认为100 KB。
- maxobjects = 1000¶
缓存对象的最大数目;默认为1000。
- maxsize = 10000000¶
整个缓存的最大大小(以字节为单位);默认为10 MB。
- cherrypy.lib.caching.expires(secs=0, force=False, debug=False)[源代码]¶
使用“expires”头影响缓存机制的工具。
- 秒
必须是int或datetime.timedelta,并指示response.time和响应到期时间之间的秒数。“expires”头将设置为response.time+secs。如果secs为零,则在过去一年内设置“expires”头段,并设置以下“cache prevention”头段:
pragma:没有缓存
缓存控件:没有缓存,必须重新验证
- 力
如果为false,则检查以下标题:
电子标签
上次修改时间
年龄
到期
如果已经存在任何响应头,则不会设置上述响应头。
- cherrypy.lib.caching.get(invalid_methods=('POST', 'PUT', 'DELETE'), debug=False, **kwargs)[源代码]¶
尝试获取缓存输出。如果足够新鲜,升高httperror(304)。
- 如果发布、放置或删除:
使此资源的任何缓存响应失效(删除)
设置request.cached=false
设置request.cacheable=false
- 否则,如果存在缓存副本:
设置request.cached=true
设置request.cacheable=false
将response.headers设置为缓存值
检查缓存的上次修改的响应头与当前的if-un-modified-since-request头;必要时引发304。
将response.status和response.body设置为缓存值
返回true
- 否则:
设置request.cached=false
设置request.cacheable=true
返回false