Read-Through
Приложение видит только кэш
В Read-Through приложение не пишет отдельную логику «miss → база → put». Оно запрашивает значение у кэша, а сам кэш знает, как загрузить отсутствующие данные из основного источника.
application
|
v
cache ---- hit ----> value
|
miss
v
cache loader
|
v
primary source
После miss loader получает значение, кэш сохраняет его и возвращает приложению. С точки зрения бизнес-кода чтение выглядит как обращение к одному компоненту.
Логика загрузки становится централизованной
Главное отличие от Cache-Aside — место ответственности. В Cache-Aside путь промаха реализует приложение, а в Read-Through он находится внутри кэширующего слоя или библиотеки, которая предоставляет такой интерфейс.
Это удобно, когда много участков кода читают данные одинаковым способом: правила построения ключа и загрузки можно держать в одном месте.
Цена абстракции
Кэш теперь должен уметь получить значение из первичного источника. Если для разных запросов нужна сложная бизнес-логика или несколько источников, loader может стать слишком умным и потерять простоту.
Кроме того, miss всё равно требует обращения к основному хранилищу. Read-Through упрощает код и распределение ответственности, но не отменяет стоимость первого чтения.