Cache使用说明

cache简介

cache是用来临时保存数据的一种机制,在处理某些计算复杂或比较耗时的数据时,如果数 据变动不频繁,如:博客,论坛等以读为主的内容,可以考虑将处理好的数据存在缓存中, 需要时读出来,以提高性能。目前Uliweb的cache支持多种后端,它采用和session相同的 存储机制,所以在uliweb中cache也是放在weto模块中。主要的配置方式与session非常接近, 目前主要支持的后端有:文件、数据库、Redis。

cache配置说明

在使用前需要先定装 uliweb.contrib.cache app。如:

[GLOBAL]
INSTALLED_APPS = [
...
'uliweb.contrib.cache',
...]

然后根据需要可以覆盖缺省的cache选项:

[CACHE]
type = 'file'
expiretime = 3600
type

表示session存储后端的类型,目前可用的值有:

  1. file 文件系统
  2. database 数据库
  3. redis redis数据库
expiretime

超时时间。在使用cache时,用户可以手工设置每项key的超时时间,如果没有给出, 则使用缺省值。

[CACHE_STORAGE]
data_dir = './caches'
file_dir = './caches/cache_files'
lock_dir = './caches/cache_files_lock'

针对不同的后端要设置的参数。对于不同的后端类型,需要设置的参数不同,上面为'file' 方式的后端参数。下面根据不同类型分别列出所需要的参数:

  1. file

    data_dir

    是cache文件保存的目录

    file_dir

    是cache数据文件保存的目录。每个cache对象将保存到一个文件中。如果没 有指定,它将是data_dir + '/session_files'目录。

    lock_dir

    是读写cache文件时所使用的文件锁目录。如果没有指定,它将是data_dir + '/session_files_lock'。

  2. datebase

    url

    sqlalchemy数据库连接串,和ORM一致。详情可以看ORM的文档或sqlalchemy的文档。

    table_name

    cache的表名。缺省为'session'。注意,因为cache使用的是和session一样的底层存储 所以如果使用数据库后端,一定要设置新的表名。

    auto_create

    是否自动创建。缺省为True。

  3. redis

    unix_socket_path

    redis socket 文件名。这是使用socket方式通用时需要进行设置。

    connection_pool

    使用host, port方式连接。值为一个dict,例如: {'host':'localhost', 'port':6379}

  4. memcache

    connection

    格式为 ['host:port']。格式为字符串的list,每个字符串为 'host:port' 的形式。 缺省为: ['localhost:11211']

Cache使用说明

cache不象session有一个Middleware,使用cache就象api一样。所以一般使用流程如下:

from uliweb import functions

cache = functions.get_cache()

通过 get_cache() 可以获得一个cache对象。然后使用这个对象可以进行相应的操作。

在调用 get_cache 时还可以传入与配置相关的参数,以动态覆盖配置的缺省值,它们是:

storage_type

配置项: 'CACHE/type' ,对应存储类型。改变它,你可以根据需要来指定后端存储方式。缺省为 'file'

options

配置项: 'CACHE_STORAGE' ,对应 CACHE_STORAGE 整个section的内容,它的值应该是一个dict。

expiry_time

配置项: 'CACHE/expiretime' ,对应超时时间,缺省为 3600

serial_cls

配置项: 'CACHE/serial_cls' ,序列化数据时使用的类,缺省为 'weto.cache.Serial'

Cache对象方法

cache.get(key, default=None, creator=None, expire=None)

从cache中读取键值

  • key 为要读取的键值
  • default 为缺省值。当key不存在时,将返回此值。
  • creator 当key不存在时,如果给出creator则会调用creator得到一个值,并且将 此值保存到cache中。如果指定了此参数,default值将会被忽略。
  • expire 与creator联用,用来设置超时时间。

如果key不存时,并且没有指定default或creator,则会引发异常。

cache.set(key, value, expire=None)

向cache设置键值

  • key 为要设置的键值
  • value 为要设置的值
  • expire 为超时时间,如果不设,则使用配置中的缺省值
cache.delete(key)

删除某一键值

cache对象也可以象字典一样使用,如:

cache['name'] = value
del cache['name']

使用字典形式来获取key时,如果不存在,则会引发异常。