Python “key_prefix”对flask缓存有什么作用?
例如,像这样,是否需要使用Python “key_prefix”对flask缓存有什么作用?,python,caching,flask,flask-extensions,Python,Caching,Flask,Flask Extensions,例如,像这样,是否需要使用键前缀 @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() 在中,它表示key\u前缀的默认值是request.path cache\u key.:
键前缀
@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()
在中,它表示key\u前缀
的默认值是request.path cache\u key.:
,cache\u key
是什么意思,我如何使用它?key\u prefix
有什么作用?在脚本根目录
之后,首先是所有内容(参数除外)。例如:
http://127.0.0.1:5000/users/login/
,请求数据为:
request.path is: /users/login/
request.path is: /page.html
http://www.example.com/myapplication/page.html?x=y
,请求数据为:
request.path is: /users/login/
request.path is: /page.html
问:cache_key是什么意思,我如何使用它
cache\u键是用于访问特定缓存值的键。正如您所知,缓存是一个键值存储
在Flask Cache中,Cache\u键
是由扩展生成的,我们不应该自己使用它
关键前缀是做什么的
key\u-prefix
用于为缓存的值生成cache\u-key
。看看到底是怎么做的
问:是否需要使用密钥前缀
假设您正在从两个不同的视图函数调用get_all_comments
,例如manage()
,和view()
。当使用@cached
缓存获取所有注释时,您不需要指定键前缀
第一次通过view
查看帖子时,get_all_comments
输出会缓存一个类似的内容:view/view
或view/module/view
,或者无论view/%s
的值是什么,其中%s
是request.path
接下来,当您通过manage
管理帖子时,不会从缓存中读取get_all_comments
输出,因为用于从缓存中获取数据的cache\u键已更改为view/manage
,而不是旧的view/view
,因为request.path现在已更改
这里缓存get_all_comments
的全部目的是尽可能从缓存中获取数据,而不是从数据库中获取数据,但由于视图函数之间的键发生了变化,因此实际上每次都从数据库本身检索数据
但是,如果您指定了key\u前缀
如all\u comments
,则第一次从数据库检索数据,下一次cache\u key
仍然是all\u comments
且找到值,并且从缓存而不是数据库访问数据
因此,当您遇到上述情况时,显然最好使用键前缀
,在其他情况下,如果始终从单个路径/视图函数调用该函数,则可以使用默认值
注意:缓存密钥是为每个请求生成/计算的,请参阅:
回答得好!只是想添加,前缀\u键也可以是可调用的,其返回值将用作缓存\u键。所以我想传递自己的make_cache_key函数可能会被“滥用”。看我这里的例子@Smoe yup你完全正确,