Как вы уже поняли, это не так просто, как, например, обновить кэш новостной ленты при ее обновлении. Существуют и другие отношения, например, списки последних новостей, которые необходимо обновить.
Самый простой способ сделать это - связать все связанные объекты. Ранее я использовал концепцию кеш групп . Продолжая мой пример новостей, в группе cache 'news' будет; новости, различные списки новостей и все остальное, что содержит новости.
Когда я редактирую новость, система распознает, что ей нужно обновить группу кэша 'news', и проходит следующий процесс ...
- получить каждый объект перед сохранением обновлений
- сохранить
- получить объект снова, если это другое обновление, различные кэши
Это очень простой пример, конечно. Гораздо более аккуратный способ сделать это - написать свой код, чтобы всегда поддерживать объект таким, каким он был бы в кеше.
Если вы добавите тег в новостную статью, то код, который вы написали, может просто записать эти изменения в базу данных, но если вместо этого вы обновите объект новостной статьи и соответствующий объект тега, оба эти объекта могут «узнать», что они изменились (так просто в качестве настройки hasChanged = true
), а затем вы можете обновить кэш и автоматически сохранить его в базе данных.