Что делает `key_prefix` для флеш-кеша?

Например, например, нужно ли использовать 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() 

В документе говорится, что значением по умолчанию request.path cache_key.: является request.path cache_key.: , что означает cache_key , как я могу его использовать? Что делает key_prefix ?

    Сначала request.path – это все (кроме параметров) после вашего script_root . Например:

    1. Для URL-адреса, например http://127.0.0.1:5000/users/login/ , данные запроса:

       request.path is: /users/login/ 
    2. Для 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 чтобы узнать, как именно это делается.


    Q. Нужно ли использовать key_prefix?

    Предположим, вы вызываете get_all_comments из двух разных функций представления, например, manage() и view() . И вы не указываете key_prefix , а get_all_comments с @cached .

    При первом просмотре сообщения через вывод get_all_comments кэшируется ключ по умолчанию, например: view/view или view/module/view , или независимо от значения view/%s , где %srequest.path .

    Затем, когда вы управляете get_all_comments через manage , вывод get_all_comments не считывается из кэша, поскольку кэш- cache_key примененный для получения данных из кеша, изменился для view/manage и не является старым view/view , поскольку request.path имеет теперь изменилось.

    Весь смысл кэширования get_all_comments заключался в том, чтобы получить данные из кеша, когда это возможно, а не с db, но так как ключи изменились между функциями просмотра, данные фактически извлекаются как раз из самого db.

    Однако в случае, если вы указали key_prefix как all_comments , тогда первые данные извлекаются из db, а в следующий раз, когда cache_key все еще находится all_comments и значение найдено, и данные all_comments доступ из кэша вместо db.

    Поэтому, когда у вас есть такие случаи, как, например, выше, очевидно, лучше использовать key_prefix , в других случаях, когда функция всегда вызывается из одной функции path / view, тогда можно использовать стандартный key_prefix .


    Примечание: cache_key генерируется / вычисляется для каждого запроса, см. Источник :

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