python - 用烧杯缓存

标签 python caching memcached beaker

我有一个程序可以抓取网站上的数据。我希望能够缓存该数据,而不是加载它(如果距上次检索数据仅过了几分钟)。我查看了烧杯,但我对缓存非常陌生,不确定这是否是我需要的。我也不太明白 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,))

关于python - 用烧杯缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16292082/

相关文章:

python - 加载 csv 到列表但跳过换行

python - Collectstatic - 权限被拒绝,pythonanywhere bash 终端

python 正则表达式 - 将换行符 (\n) 替换为其他内容

python - 枚举 Django 数据库缓存中的键

JavaFx WebView 缓存

ruby-on-rails - 为 memcached 和 Rails 组合片段和对象缓存的最佳方法

memcached - 使用内存缓存,您可以动态添加/远程节点吗?

python - 加速 Django 数据库函数以对缺失值进行地理插值

Bash:缓存命令导致别名?

docker - 如何增加docker中memcached项目的最大大小