#node.js #mongodb #express #mongoose #redis
#node.js #mongodb #экспресс #мангуст #redis
Вопрос:
У меня есть приложение с более чем 10 отдельными моделями данных. Каждая из этих моделей так глубоко связана друг с другом. Например, существует модель с именем user, которая связана с другими моделями данных, такими как сообщения, комментарии, ответы, соединения и т. Д. Я пытаюсь создать систему кэширования redis, которая будет кэшировать данные при каждом выполнении запроса. Итак, рассмотрим этот сценарий, в котором за сообщение проголосовали, когда произойдет этот запрос, мне придется обновить все модели, которые каким-то образом связаны с этим запросом.
Итак, мой вопрос заключается в том, как структурировать мою систему кэша redis, чтобы все связанные данные обновлялись каждый раз при выполнении запроса.
Комментарии:
1. Сколько уровней иерархии у вас есть?
2. Кажется, широкий вопрос,
Ответ №1:
Это очень широкий вопрос. Я не знаю, как выглядит ваша схема БД и эти отношения сущностей. Но у меня есть несколько предложений, которые, я надеюсь, помогут вам структурировать ваши данные.
Разбейте хранилище ваших объектов user, post, comment, reply
отдельно. Когда вам нужно получить post
, например, get post и все его объекты отдельно от redis, затем объедините их для создания ответа.
Что-то вроде POST:345
, USER:23
, COMMENT:567
.
Не храните все в redis, поддерживать кэш намного сложнее. Храните только те данные, к которым вы обращаетесь чаще и которые действительно окажут влияние, если вы будете обслуживать их из кэша. Например, улучшится сохранение профиля пользователя all post responses
, comment responses
, connection lists
и т. Д., Потому что Все они будут иметь пользовательские объекты, и вы будете их кэшировать.
Увеличивать статистику непосредственно в redis Значения количества лайков и комментариев можно напрямую increment
и decrement
в redis.
Аннулирование кэша при обновлении Когда объект обновляется, не обновляйте его кэш. Просто удалите его из кэша, и следующий get
вызов будет кэшировать обновленные данные. Это просто для упрощения кода.