Главный принцип кеширования: данные всегда актуальны
В этом выпуске рассказываю, о том, как правильно должно работать кеширование:
Если разработчики вам говорят, что кеш обновляется раз в полчаса и «надо просто подождать», пусть послушают этот выпуск. Кеш — не оправдание для отображения устаревших данных. Кеш нужен, чтобы данные показывались быстро, но без ущерба для их актуальности. Если из-за кеша вы видите устаревшие данные, значит в кеше баг.
Подкаст-версия для тех, кто в дороге:
Тема начинается с 2:01 с рассказа о смысле кеширования, сам принцип — c 7:00
РСС для подкастных программ:
И теперь можно найти подкаст в каталоге Айтюнса. Надо искать «Видеоблог-подкаст Ильи Бирмана», но в нормальных программах находит даже если просто написать «Бирман».
There are only two hard things in Computer Science: cache invalidation and naming things.
— Phil Karlton
Это, конечно, шутка, но только не очень. Инвалидация кеша — одна из самых сложных задач программирования.
Принцип «данные всегда актуальны», очевидно, правильный, но не во всех случаях главный. Иногда есть выбор: либо на 5 минут устаревшая страница, либо никакой страницы, и тогда главным приципом становиться «чтобы работало»
Главный принцип кэширования: кэш изменяет скорость программы, но не её поведение.
Если кэш меняет поведение программы, то либо это означает, что есть ошибка, которую надо исправить, либо стоит перестать называть эту конструкцию кэшем.
Есть задачи, где кеш инвалидируется по таймеру, а первичный источник не всегда имеет возможность отдавать актуальные данные (например, в длинной транзакции).
Коммент к догонке. Платный Ютуб не во всех странах позволяет проигрывать видео (аудио) в фоне. В Беларуси он только отключает рекламу, но ни фонового воспроизведения, ни офлайн воспроизведения нет, о чем он предупреждает почти при каждом запуске приложения (что бесит еще сильнее). https://support.google.com/youtube/answer/6307365?hl=en
Даже у таких платформ-гигантов, как тот же Фейсбук, инвалидация кэша работает не совсем корректно. Например, данные Opengraph могут висеть необновлёнными даже при запросе на инвалидацию где-то от одного дня.
У Фейсбука всё работает запредельно глючно. Мне кажется, тут слово «даже» неуместно :-)
САР-теорема как раз о том, что на выбор есть только два варианта: не показывать пользователю ничего, или показывать устаревшие данные. Вариант «показывать свежее» — иллюзия, исчезающая с увеличением размера системы.