TurboGears – 缓存

为了提高 Web 应用程序的性能,尤其是当它涉及长时间操作时,可以使用缓存技术。TurboGears 提供两种类型的缓存技术 −

整页缓存

它在 HTTP 协议级别工作,通过让用户的浏览器或中间代理服务器(如 Squid)拦截请求并返回文件的缓存副本,避免向服务器发送整个请求。

应用程序级缓存

这在应用程序服务器内工作,以缓存计算值,通常是复杂数据库查询的结果,以便将来的请求可以避免需要重新计算这些值。对于 Web 应用程序,应用程序级缓存提供了一种灵活的方式来缓存复杂查询的结果,这样可以将给定控制器方法的总负载减少到几个特定于用户或特定于案例的查询和模板的渲染开销。

应用程序级缓存

如前所述,"快速启动"TurboGears 项目配置为启用 Beaker 包以支持缓存。Beaker 支持以下用于缓存存储的后端 −

  • 内存 − 用于每个进程的存储。它非常快。

  • 文件系统 − 每个进程存储以及多进程。

  • DBM 数据库 −每个进程,多进程,相当快。

  • SQLAlchemy 数据库 − 每个数据库服务器存储。与上面给出的选项相比速度较慢。

  • Memcached − 基于多服务器内存的缓存。

控制器缓存

对于快速控制器缓存,可以使用 cached() 装饰器。整个控制器主体根据请求的各种参数进行缓存。tg.decorators.cached() 装饰器的定义如下

tg.decorators.cached(key, expire, type, 
   query-args, cache_headers, invalidate_on_startup, cache_response)

参数说明如下 −

Sr.No. 参数 &描述
1

key

指定用于生成缓存键的控制器参数。

2

expire

缓存过期前的时间(以秒为单位),默认为"永不"。

3

Type

dbm、memory、file、memcached 或 None。

4

cache_headers

表示响应的标头名称元组标头。

5

invalidate_on_startup

如果为 True,则每次应用程序启动或重新启动时,缓存都会失效。

6

cache_response

响应是否应缓存,默认为 True。

以下是控制器缓存的示例 −

@cached(expire = 100, type = 'memory')
@expose()
def simple(self):
return "This is a cached controller!"

模板级缓存

如果模板内容没有改变,Genshi 模板引擎会从缓存中检索模板。此缓存的默认大小为 25。默认情况下,模板的自动重新加载为 true。为了提高性能,可以在 app_cfg.py 中进行以下设置 −

[app:main]
genshi.max_cache_size = 100
auto_reload_templates = false

要缓存模板,您只需从呈现缓存模板的控制器返回 tg_cache 选项。

tg_cache 是一个接受以下键的字典 −

  • key − 缓存键。 默认: 无。

  • expire − 缓存必须保持活动的时间。默认: 永不过期

  • type − 内存、dbm、memcached。默认: dbm。

以下示例说明了模板缓存 −

@expose(hello.templates.user')
def user(self, username):
   return dict(user = username, tg_cache = dict(key = user, expire = 900))