Как структурировать Redis для схем данных со слишком большим количеством ассоциаций — mongodb

#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 вызов будет кэшировать обновленные данные. Это просто для упрощения кода.