У меня есть простой API с базовым CRUD operations
, где у пользователя может быть несколько задач, и как только пользователь войдет в систему, он сможет обновить, удалить, добавить и выбрать все задачи.Я использую MongoDB
с mLab
в качестве основного хранилища данных для хранения документов для схем пользователей и задач.Я хочу реализовать Redis caching
в своем приложении (только для учебных целей), и я могу подумать о том, чтобы реализовать его при извлечении заданий для определенного пользователя (на домашней странице), когда он входит в систему как getAllUserTasks
.очень часто используется и вызывается, когда происходит какое-либо удаление / обновление / добавление.На данный момент приложение отлично работает с MongoDB
, а документы правильно отображаются в mLab
.Теперь, перейдя к части Redis, у меня есть вопрос, как мне структурировать базу данных Redis.Во-первых, позвольте мне опубликовать то, что у меня есть в приложении:
Схема пользователя:
const userSchema = new Schema({
userName: { type: String, unique: true, required: true },
hashPassword: { type: String, required: true },
firstName: { type: String, required: true },
lastName: { type: String, required: true },
userAge: { type: Number, required: true },
userDetails: { type: String, required: true },
userCreatedOn: { type: Date, default: Date.now }
});
Схема задачи:
const taskSchema = new Schema({
//Below is userAssigned which is ref for above User document.
userAssigned: { type: Schema.Types.ObjectId, ref: User},
taskDesc: { type: String, required: true },
taskCreatedOn: { type: Date, default: Date.now },
taskDueDate: { type: Date, required: true }
});
Функция getAllUserTasks:
async function getAllUserTasks(userParam) {
return await Task.find({ userAssigned: userParam.userId })
.lean()
.sort({ taskDueDate: "asc" });
}
Теперь getAllUserTasks
возвращает мне Array
всех заданий для Пользователя.Я немного погуглил и обнаружил, что могу использовать https://redislabs.com/
для своей базы данных Redis.Теперь, как мне структурировать базу данных Redis, чтобы оперативно получать задачи?1. Если я просто скопирую вышеупомянутую схему в базу данных Redis, и мои документы с заданиями будут там жить.2. Если у меня будет key
как «Задачи», а value
будет Массивом Задач, которые я получаю от .find при вызове getAllUserTasks
.Если это так, как я буду следить за тем, чтобы после удаления / обновления / добавления задач база данных Redis обновлялась соответствующим образом?Ниже для справки приведены мои методы обновления / создания / удаления:
createTask
async function createTask(userParam) {
if (await User.findOne({ _id: userParam.userAssigned })) {
const task = new Task(userParam);
await task.save();
} else {
throw "User does not exist";
}
}
updateTask
async function updateTask(id, userParam) {
return await Task.findOneAndUpdate(
{ _id: id },
userParam,
{
new: true,
overwrite: true
},
function(err) {
if (err) return err;
}
);
}
deleteUserTask
async function deleteUserTask(id) {
return await Task.findByIdAndRemove(id, function(err) {
if (err) {
return err;
}
});
}
AsЯ новичок в Redis, любая помощь будет очень признательна.Спасибо!