首先request.path
是 . 之后的所有内容(参数除外)script_root
。例如:
对于类似的 url http://127.0.0.1:5000/users/login/
,请求数据是:
request.path is: /users/login/
对于上面链接示例中的 url http://www.example.com/myapplication/page.html?x=y
,请求数据为:
request.path is: /page.html
Q. cache_key 是什么意思,如何使用?
cache_key
是用于访问特定缓存值的键。如您所知,缓存是键值存储。
在 Flask-Cache 中,cache_key
它是由扩展生成的,我们不应该自己使用它。
问:key_prefix 有什么作用?
key_prefix
用于生成cache_key
缓存值。查看make_cache_key
源代码以了解它是如何完成的。
Q. 有必要使用key_prefix吗?
假设您get_all_comments
从 2 个不同的视图函数调用,例如manage()
和view()
。而且您没有指定key_prefix
, 缓存get_all_comments
时使用@cached
.
第一次通过输出查看帖子view
时,会使用默认键缓存,例如:or ,或任何值, where is 。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
like all_comments
,那么第一次从 db 中检索数据,下一次cache_key
仍然all_comments
找到值,并且从缓存而不是 db 访问数据。
因此,当您遇到上述情况时,使用 a 显然更好key_prefix
,在其他情况下,当始终从单个路径/视图函数调用该函数时,可以使用默认值。
注意:cache_key 是为每个请求生成/计算的,请参阅源代码:
cache_key = decorated_function.make_cache_key(*args, **kwargs)