首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`key_prefix`对flask-cache做了什么?

`key_prefix`对flask-cache做了什么?
EN

Stack Overflow用户
提问于 2013-01-09 13:47:33
回答 1查看 2.7K关注 0票数 9

例如,是否需要使用key_prefix

代码语言:javascript
复制
@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()

document中,它说key_prefix的默认值是request.path cache_key.:cache_key是什么意思,我如何使用它?key_prefix做了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-09 19:43:20

首先,request.pathscript_root之后的所有东西(除了params)。例如:

对于像http://127.0.0.1:5000/users/login/这样的url,请求数据为:

request.path是: /users/login/

  • For一个url,如上面链接中的示例http://www.example.com/myapplication/page.html?x=y,请求数据是:

request.path是: /page.html

问: cache_key是什么意思,我如何使用它?

cache_key是用于访问特定缓存值的键。正如您所知道的,缓存是一个键值存储。

在Flask-Cache中,cache_key是由扩展生成的,我们不应该自己使用它。

问: key_prefix是做什么的?

key_prefix用于为缓存值生成cache_key。请参阅make_cache_key source以了解具体是如何完成的。

问:有必要使用key_prefix吗?

假设您正在从两个不同的视图函数调用get_all_comments,比如manage()view()。在使用@cached缓存get_all_comments时,您不需要指定key_prefix

第一次通过view查看帖子时,get_all_comments输出用default key缓存,如:view/viewview/module/view,或者view/%s的值是什么,其中%srequest.path

接下来,当您通过manage管理post时,不会从缓存中读取get_all_comments输出,因为应用于从缓存获取数据的cache_key已更改为view/manage,而不是旧的view/view,因为request.path现在已更改。

这里缓存get_all_comments的全部目的是为了尽可能地从缓存中获取数据,而不是从数据库中获取数据,但是由于键在视图函数之间发生了变化,所以实际上两次都是从数据库本身中检索数据。

但是,如果您指定了像all_comments这样的key_prefix,那么第一次从db检索数据,下一次cache_key仍然是all_comments,并且找到值,并且从缓存而不是db访问数据。

因此,当你遇到像上面这样的情况时,使用key_prefix显然更好,在其他情况下,当函数总是从单个路径/视图函数调用时,则可以使用默认函数。

注意:每次请求都会生成/计算cache_key,请参阅source

代码语言:javascript
复制
cache_key = decorated_function.make_cache_key(*args, **kwargs)
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14228985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档