2013-04-30 65 views
1

我有一個程序,用於擦除數據的網站。我希望能夠緩存該數據,而不是在它上次檢索後的幾分鐘內加載它。我看着燒杯,但我是非常新的緩存,不知道這是我需要的。我也不太瞭解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() 

我是以這種正確的方式去做的嗎?

回答

2

您只使用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