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

钥匙

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

2

到期

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

3

类型

dbm、内存、文件、memcached 或无。

4

缓存头

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

5

启动时无效

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

6

缓存响应

是否应该缓存响应,默认为 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 - 缓存必须保持活动状态的时间。默认:永不过期

  • 类型- 内存、dbm、memcached。默认值: dbm。

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

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