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)

参数说明如下:

序号 参数及说明
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 - 缓存键。默认值:None。

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

  • type - memory、dbm、memcached。默认值:dbm。

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

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