2012-09-26 51 views
2

按照由SQLAlchemy的文檔提供的示例緩存我們假設做SQLAlchemy的查詢這個在金字塔框架實施的SQLAlchemy燒杯緩存

from caching_query import FromCache 

# load Person objects. cache the result under the namespace "all_people". 
print "loading people...." 
people = Session.query(Person).options(FromCache("default", "all_people")).all() 

我有一個燒杯中development.ini

以下配置
cache.regions = day, hour, minute, second 
cache.type = file 
cache.data_dir = %(here)s/cache/sess/data 
cache.lock_dir = %(here)s/cache/sess/lock 
cache.second.expire = 1 
cache.minute.expire = 60 
cache.hour.expire = 3600 
cache.day.expire = 86400 

當我使用上面的示例代碼在我的應用程序數據沒有緩存在緩存文件夾,所以我假設基於內存的緩存是默認的,是否有可能切換sqlalchemy緩存類型爲基於文件?還是我錯了?

回答

1

你的問題是缺少一些細節,但讓我試試:

  • 傳遞給FromCache()第一個參數是一個燒杯緩存區域的名稱,它應該與配置的地區之一,這是不這裏的情況。或者,也許你在代碼中配置default區域(如果區域未知,我預計BeakerException會被拋出)?

  • 您需要pyramid_beaker模塊安裝幷包含在金字塔的項目配置中。我建議你按照pyramid_beakermanual's Setup section

  • 爲了將.ini文件設置傳播到Beaker,您需要在應用程序的__init__.py中使用一些額外的代碼。這在手冊的Beaker cache region support部分有描述。

下面是從我目前的項目工作示例,同時配置基於燒杯會議和緩存(刪除所有無關的部分):

from pyramid.config import Configurator 
from pyramid_beaker import set_cache_regions_from_settings 
from pyramid_beaker import session_factory_from_settings 

def main(global_config, **settings): 
    # Configure Beaker caching/sessions  
    set_cache_regions_from_settings(settings) 
    session_factory = session_factory_from_settings(settings) 

    config = Configurator(settings=settings) 
    config.set_session_factory(session_factory) 
    config.include('pyramid_beaker') 

    config.add_static_view('static', 'static', cache_max_age=3600) 
    config.add_route('home', '/') 

    config.scan() 
    return config.make_wsgi_app()