首先request.path 是script_root 之后的所有内容(参数除外)。例如:
-
对于像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
问。 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()。而且你没有指定key_prefix,同时缓存get_all_comments和@cached。
第一次通过view查看帖子时,get_all_comments 的输出会被缓存为 default key,例如:view/view 或 view/module/view,或任何 @987654348 的值@ 是,其中%s 是request.path。
接下来,当您通过manage管理帖子时,不会从缓存中读取get_all_comments 输出,因为用于从缓存中获取数据的cache_key 已更改为@987654354 @ 而不是旧的view/view,因为request.path 现在已经改变了。
这里缓存get_all_comments 的重点是尽可能从缓存中获取数据,而不是从数据库中获取数据,但由于视图函数之间的键已更改,因此实际上两次都从数据库本身检索数据。
但是,如果您指定了 key_prefix 像 all_comments,那么第一次从数据库中检索数据,下一次 cache_key 仍然是 all_comments 并且找到值,并且数据是从缓存而不是数据库访问。
因此,当您遇到上述情况时,使用key_prefix 显然更好,在其他情况下,当始终从单个路径/视图函数调用该函数时,可以使用默认值。
注意:cache_key 是为每个请求生成/计算的,请参阅source:
cache_key = decorated_function.make_cache_key(*args, **kwargs)