Han*_*Sun 5 python caching flask flask-extensions
比如这样,是否有必要使用key_prefix?
@cache.cached(timeout=50, key_prefix='all_comments')
def get_all_comments():
comments = do_serious_dbio()
return [x.author for x in comments]
cached_comments = get_all_comments()
Run Code Online (Sandbox Code Playgroud)
在文档中,它表示key_prefix默认值是request.path cache_key.:什么cache_key意思,我该如何使用它?怎么key_prefix办?
boo*_*dev 13
首先request.path是你之后的一切(除了params)script_root.例如:
对于类似的网址http://127.0.0.1:5000/users/login/,请求数据是:
request.path is: /users/login/
Run Code Online (Sandbox Code Playgroud)对于上面链接示例中的网址http://www.example.com/myapplication/page.html?x=y,请求数据为:
request.path is: /page.html
Run Code Online (Sandbox Code Playgroud)问:cache_key是什么意思,我该如何使用它?
本cache_key是用来访问特定的缓存值的关键.如您所知,缓存是键值存储.
在Flask-Cache中,cache_key由扩展生成,我们不应该自己使用它.
问:key_prefix有什么作用?
key_prefix用于生成cache_key缓存值.请参阅make_cache_keysource以了解它是如何完成的.
问:是否有必要使用key_prefix?
假设您正在get_all_comments使用两种不同的视图函数调用,比如说manage()和view().并且key_prefix在缓存get_all_comments时不指定a @cached.
您第一次查看后通过view的get_all_comments输出缓存与默认密钥,如:view/view或者view/module/view,或任何价值view/%s的,这里%s是request.path.
接下来,当您管理发布时manage,get_all_comments不会从缓存中读取输出,因为cache_key应用于从缓存中获取数据已更改为view/manage旧的view/view,因为request.path现在已更改.
get_all_comments这里缓存的全部要点是尽可能从缓存中获取数据而不是数据库,但由于密钥在视图函数之间发生了变化,因此数据实际上都是从数据库本身检索的.
但是,如果您指定了key_prefix类似的all_comments,那么第一次从数据库中检索数据,并且下次cache_key仍然all_comments找到值并且从缓存而不是数据库访问数据.
因此,当您遇到类似上述key_prefix情况时,显然最好使用a ,在其他情况下,当总是从单个路径/视图函数调用该函数时,可以使用默认函数.
注意:为每个请求生成/计算cache_key,请参阅源:
cache_key = decorated_function.make_cache_key(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)