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 ;提供替换类的完整虚线名称作为配置值。它必须实现基本方法 getputdeleteclear .

通过在config中提供任何属性(包括重写方法),可以在缓存实例上设置这些属性。上面设置了 delay 例如,属性。

class cherrypy.lib.caching.AntiStampedeCache[源代码]

基类:dict

用于缓存项的存储系统,可减少踩踏冲突。

wait(key, timeout=5, debug=False)[源代码]

返回给定键的缓存值,或不返回。

如果超时不是“无”,并且该值已由另一个线程计算,请等待给定的超时时间结束。如果该值在超时到期之前可用,则返回该值。如果没有,则不会返回任何消息,并且会在缓存中放置一个sentinel来通知其他线程等待。

如果超时为无,则不执行等待,也不使用sentinel。

class cherrypy.lib.caching.Cache[源代码]

基类:object

缓存实现的基类。

clear()[源代码]

将缓存重置为初始的空状态。

delete()[源代码]

删除当前资源的所有缓存变体。

get()[源代码]

如果在缓存中,则返回当前变量,否则不返回。

put(obj, size)[源代码]

将当前变量存储在缓存中。

class cherrypy.lib.caching.MemoryCache[源代码]

基类:cherrypy.lib.caching.Cache

内存中的缓存,用于改变响应内容。

self.store中的每个键都是一个URI,每个值都是一个反stampedecache。任何给定的URI的响应可能会根据“选择请求头”的值而变化,即那些在vary响应头中命名的值。我们假定在应用程序的整个生命周期中每个URI的头名称列表都是常量,并将该列表存储在 self.store[uri].selecting_headers .

中包含的项目 self.store[uri] 具有键,这些键是请求头值的元组(顺序与选择头中的名称相同),以及实际响应的值。

antistampede_timeout = 5

等待其他线程释放缓存锁的秒数。

clear()[源代码]

将缓存重置为初始的空状态。

debug = False
delay = 600

缓存内容过期前的秒数;默认值为600(10分钟)。

delete()[源代码]

删除当前资源的所有缓存变体。

expire_cache()[源代码]

不断检查缓存的对象,使过期的对象过期。

此函数设计为在其自己的守护进程线程中运行,在中引用 self.expiration_thread .

expire_freq = 0.1

缓存过期扫描之间的休眠秒数。

get()[源代码]

如果在缓存中,则返回当前变量,否则不返回。

maxobj_size = 100000

每个缓存对象的最大大小(以字节为单位);默认为100 KB。

maxobjects = 1000

缓存对象的最大数目;默认为1000。

maxsize = 10000000

整个缓存的最大大小(以字节为单位);默认为10 MB。

put(variant, size)[源代码]

将当前变量存储在缓存中。

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

cherrypy.lib.caching.tee_output()[源代码]

TEE响应输出到缓存存储。内部。