使用烧杯进行缓存

问题描述:

我有一个程序,用于擦除数据的网站。我希望能够缓存该数据,而不是在它上次检索后的几分钟内加载它。我看着烧杯,但我是非常新的缓存,不知道这是我需要的。我也不太了解Cachemanager是什么,为什么我只使用“cache.get”而不是同时使用“cache.set”和“cache.get”。我已经包含了我一直用来测试的脚本。使用烧杯进行缓存

from beaker.cache import CacheManager 
from beaker.util import parse_cache_config_options 
import sched, time 
from datetime import datetime 

cache_opts = { 
      'cache.type': 'file', 
      'cache.data_dir': '../Beaker/tmp/cache/data', 
      'cache.lock_dir': '../Beaker/tmp/cache/lock' 
      } 

cache = CacheManager(**parse_cache_config_options(cache_opts)) 
tmpl_cache = cache.get_cache('mytemplate', type='file', expire=5) 

def get_results(): 
    # do something to retrieve data 
    print 'hey' 
    data = datetime.now() 
    return data 

def get_results2(): 
    return 'askdjfla;j' 

s = sched.scheduler(time.time, time.sleep) 
def get_time(sc):  
    results = tmpl_cache.get(key='gophers', createfunc=get_results)  
    results2 = tmpl_cache.get(key='hank', createfunc=get_results2) 
    print results,results2 
    sc.enter(1, 1, get_time, (sc,)) 

s.enter(1, 1, get_time, (s,)) 
s.run() 

我是以这种正确的方式去做的吗?

您只使用cache.get,这是正确的,因为如果在缓存中找不到它,它将调用该函数来创建它。如果你改为使用装饰API,这将变得更加清晰和容易:

@cache.cache('gophers', expire=3600) 
def get_results(): 
    # do something to retrieve data 
    print 'hey' 
    data = datetime.now() 
    return data 

@cache.cache('hank', expire=3600) 
def get_results2(): 
    return 'askdjfla;j' 

s = sched.scheduler(time.time, time.sleep) 
def get_time(sc):  
    results = get_results() 
    results2 = get_results2() 
    print results,results2 
    sc.enter(1, 1, get_time, (sc,)) 
+0

是的,这有助于很多。我还有另一个问题,我怎么知道在配置选项中使用什么类型。你什么时候使用“dbm”vs“文件”vs“内存”。 – Wallace 2013-04-30 14:01:19

+0

@Wallace:dbm vs文件我不知道。记忆是如果你不想长时间存储它,并有足够的内存。 – 2013-04-30 19:06:25

+0

文件和内存将足以满足我的需求,现在我认为对如何实现每个文件和内存都有足够的了解。我很难理解烧杯的基础知识。他们只是简单地讨论如何在他们的文档中使用它,所以感谢您的帮助! – Wallace 2013-04-30 23:11:13