gpt4 book ai didi

python - `key_prefix` 对 flask 缓存有什么作用?

转载 作者:太空狗 更新时间:2023-10-30 00:33:14 29 4
gpt4 key购买 nike

比如像这样,有必要使用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()

document ,它说key_prefix的默认值为request.path cache_key.:cache_key是什么意思,我该如何使用它? key_prefix 有什么作用?

最佳答案

首先是 request.path 是你的 script_root 之后的一切(参数除外) .例如:

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

    request.path is: /users/login/
  2. 对于上面链接示例中的 url,http://www.example.com/myapplication/page.html?x=y ,请求数据为:

    request.path is: /page.html

Q. What does cache_key mean, how can I use it?

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

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


Q. What does key_prefix do?

key_prefix用于生成 cache_key对于缓存值。参见 make_cache_key source看看它是如何完成的。


Q. Is it necessary to use key_prefix?

假设您正在调用 get_all_comments来自 2 个不同的 View 函数,比如 manage() , 和 view() .而且您没有指定 key_prefix , 同时缓存 get_all_comments@cached .

第一次通过view查看帖子 get_all_comments输出缓存在 default key 中喜欢:view/viewview/module/view ,或者 view/%s 的任何值是,在哪里 %srequest.path .

下一步,当您通过 manage管理帖子时, get_all_comments输出未从缓存中读取,因为 cache_key应用于从缓存中获取数据已更改为 view/manage并且不是旧的view/view ,因为 request.path 现在已经改变了。

整点缓存get_all_comments这里是尽可能从缓存而不是数据库中获取数据,但是由于键在 View 函数之间发生了变化,因此实际上两次都是从数据库本身检索数据。

但是,如果您指定了 key_prefix喜欢all_comments , 然后第一次从数据库中检索数据, 下一次 cache_key还是all_comments并找到值,并从缓存而不是数据库访问数据。

因此,当您遇到上述情况时,使用 key_prefix 显然更好。 ,在其他情况下,当始终从单个路径/ View 函数调用函数时,可以使用默认函数。


注意:为每个请求生成/计算 cache_key,参见 source :

cache_key = decorated_function.make_cache_key(*args, **kwargs)

关于python - `key_prefix` 对 flask 缓存有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14228985/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com