Комментарии 6
Стоило упомянуть, что есть библиотеки, реализующие уже готовые абстракции над разными видами кэширования. Чтобы сменить in-memory на redis или memcached, не нужно переписывать декораторы во всем проекте, достаточно в одном месте изменить бекенд такой библиотеки. Как пример — aiocache.
А существуют какие-то стандартные подходы, практики по тому как и когда нужно узнавать, что закэшированные данные могли обновиться и кэш устарел?
Да, конечно! Например, можно воспользоваться штатными механизмами того же redis - pub/sub. Но чаще всего стандартного TTL, который вы определяете сами в зависимости от требований по актуализации данных и природы самих данных в том же redis вполне достаточно для актуализации данных в кеше, т.е. обычно нет необходимости в дополнительном уведомлении потребителей о том, что кеш в какой то момент устарел (протух) и был автоматически обновлен при последующих обращениях к данным.
key_parts = [func.__name__] + list(args)
kwargs потеряли
Не изобретая велосипед. Кэширование: рассказываем главные секреты оптимизации доступа к данным