Как аннулировать несколько ключей с общим префиксом в кэше стакана / пилонов?
Вопрос
Предположим, у меня есть следующий фрагмент, который кэширует нагрузку функции, используя 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()
Вам понадобится тщательное планирование, что происходит, в каком, чтобы
- у вас не заканчивает миллионы маленьких кешей
- Когда вы уничтожаете кэш, вы тоже не выбрасываете некоторые все еще более свежие данные