Как стать автором
Обновить

Не изобретая велосипед. Кэширование: рассказываем главные секреты оптимизации доступа к данным

Время на прочтение4 мин
Количество просмотров9.7K
Всего голосов 9: ↑7 и ↓2+5
Комментарии6

Комментарии 6

Стоило упомянуть, что есть библиотеки, реализующие уже готовые абстракции над разными видами кэширования. Чтобы сменить in-memory на redis или memcached, не нужно переписывать декораторы во всем проекте, достаточно в одном месте изменить бекенд такой библиотеки. Как пример — aiocache.

Спасибо за дополнение, включил в секцию UPDATE в конце статьи.

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

Да, конечно! Например, можно воспользоваться штатными механизмами того же redis - pub/sub. Но чаще всего стандартного TTL, который вы определяете сами в зависимости от требований по актуализации данных и природы самих данных в том же redis вполне достаточно для актуализации данных в кеше, т.е. обычно нет необходимости в дополнительном уведомлении потребителей о том, что кеш в какой то момент устарел (протух) и был автоматически обновлен при последующих обращениях к данным.

key_parts = [func.__name__] + list(args)

kwargs потеряли

Вы совершенно правы. Для упрощения понимания статьи не стал усложнять код, но если хочется/требуется сделать decorator более универсальным можно поддержать kwargs, не забывая, конечно, про сортировку:

sorted(kwargs.items())

Зарегистрируйтесь на Хабре, чтобы оставить комментарий