Как аннулировать несколько ключей с общим префиксом в кэше стакана / пилонов?

StackOverflow https://stackoverflow.com/questions/4836034

  •  27-10-2019
  •  | 
  •  

Вопрос

Предположим, у меня есть следующий фрагмент, который кэширует нагрузку функции, используя search_term, ограничение в качестве ключа, предположительно. (В стакане он преобразуется в строковое представление кортежей всех аргументов, которые, как я полагаю,)

# Assuming a cache object is available like:
cache = CacheManager(dict_of_config_options)


def populate_things():

    @cache.cache('mycache', expire=15)
    def load(search_term, limit, offset):
        return load_the_data(search_term, limit, offset)

    return load('rabbits', 20, 0)

Теперь, если я сделаю некоторую вставку в базу данных и хочу аннулировать все кэшированные данные, связанные с недавно обновленным search_term, как я могу перечислить все кэшированные данные, чтобы я мог вручную лишить их аннулирования?

Это было полезно?

Решение

Анициализация единого ключа является прямым:

cache.get_cache("mycache").remove_value(key="rabbits")

Если, как говорится в названии вашего вопроса, целую кучу ключей, которые необходимо недействительно, я бы порекомендовал поместить их в отдельный кэш, а затем очистить весь кеш:

cache.get_cache("all_my_rabbit_stuff").clear()

Вам понадобится тщательное планирование, что происходит, в каком, чтобы

  • у вас не заканчивает миллионы маленьких кешей
  • Когда вы уничтожаете кэш, вы тоже не выбрасываете некоторые все еще более свежие данные
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top