IMHO, Функціональне реактивне програмування (FRP) є в певному сенсі загальним способом вирішення недійсного кешу.
Ось чому: несвіжі дані в термінології FRP називаються глюком . Одна з цілей FRP - гарантувати відсутність збоїв.
FRP пояснюється більш докладно в цій розмові «Суть FRP» та в цій відповіді «SO» .
У розмові , що Cells є кешированниє Object / Entity і Cellоновлюється , якщо один з його залежності оновлюється.
FRP приховує код сантехніки, пов'язаний з графіком залежності, і переконує, що немає несвіжих Cells.
Іншим способом (відмінним від FRP), про який я можу придумати, є введення обчисленої величини (типу b) в якусь письменницю Монаду, Writer (Set (uuid)) bде Set (uuid)(позначення Haskell) містяться всі ідентифікатори змінних значень, від яких bзалежить обчислене значення . Отже, uuidце якийсь унікальний ідентифікатор, який ідентифікує змінне значення / змінну (скажімо, рядок у базі даних), від якої bзалежить обчислене .
Поєднайте цю ідею з комбінаторами, які працюють над цим автором Monad, і це може призвести до якогось загального рішення про відключення кешу, якщо ви використовуєте лише ці комбінатори для обчислення нового b. Такі комбінатори (скажімо, спеціальну версію filter) приймають монарди та (uuid, a)-s Writer як вхідні дані, де aє змінні дані / змінна, ідентифікована uuid.
Отже, кожного разу, коли ви змінюєте "вихідні" дані (uuid, a)(скажімо, нормалізовані дані в базі даних, з якої bбуло обчислено), від якого bзалежить обчислене значення типу, ви можете визнати недійсним кеш, який міститься, bякщо змінити будь-яке значення, aвід якого bзалежить обчислене значення. , тому що, виходячи з Set (uuid)монади Writer Monad, ви можете сказати, коли це станеться.
Отже, щоразу, коли ви щось мутуєте із заданим uuid, ви транслюєте цю мутацію в усі кеш-пам'ятки, і вони призначають недійсні значення, bякі залежать від значення, що змінюється, ідентифікованого з сказаним, uuidоскільки монада Writer, в яку bвкладено, може сказати, чи bзалежить це від сказаного uuidчи ні.
Звичайно, це окупається, лише якщо ти читаєш набагато частіше, ніж пишеш.
Третій, практичний підхід - використовувати матеріалізовані представлення даних у базах даних та використовувати їх як кеші. AFAIK вони також прагнуть вирішити проблему недійсності. Це, звичайно, обмежує операції, які з'єднують мутаційні дані з отриманими даними.