Как сделать недействительными несколько ключей с общим префиксом в кеше мензурок / пилонов? - PullRequest
0 голосов
/ 29 января 2011

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

# 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, как я могу перечислить все кэшированные данные, чтобы я мог их вручную аннулировать?

1 Ответ

3 голосов
/ 02 февраля 2011

Аннулировать один ключ просто:

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

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

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

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

  • , чтобы у вас не было миллионов маленьких кешей
  • при стирании кэша вы не выбрасываете некоторые еще свежие данные
...