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
有什么作用?

脚本根目录
之后,首先是所有内容(参数除外)。例如:

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

    request.path is: /users/login/
    
    request.path is: /page.html
    
  • 对于上面链接示例中的url,
    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你完全正确,