Описание проблемы приведено ниже: сначала я создал несколько сообщений, используя свой бэкэнд-API, затем во время извлечения сообщений сначала смотрю на Redis, если существует ключ, связанный с этими сообщениями, затем я возвращаю данные ещеЯ отправляю запрос в MongoDB и получаю все эти сообщения, а затем сохраняю его в Redis.Теперь снова делаю запрос на выборку данных, а затем корректно получаю данные из Redis.Но проблема в том, что когда я теперь добавляю другой пост, используя POST-запрос из моего бэкэнда, а затем снова обновляю свой redis, он успешно создается в mongoDB, но когда я делаю посты, я получаю более старые кэшированные посты вместо всех постов, включая новые посты.
router.get('/posts',(req, res)=>{
// check if any hashed data is there in redis
client.get('posts',(err, posts)=>{
if(posts){
// if yes then send it right away
console.log('serving from redis ');
return res.json({success: true, posts: JSON.parse(posts)});
} else {
// if no then send the request and updated the redis with the new data
console.log('serving from mongoDB');
Post.find({})
.sort('-date')
.populate('user', ['name', 'avatar', 'email'])
.populate('profile')
.exec((err, posts)=>{
if(err){
console.log(err);
res.status(404).json({success: false, err});
}
if(posts){
// now update the redis cache
client.set('posts', JSON.stringify(posts));
res.json({success: true, posts: posts});
}
})
}
});
});
Вот код для создания постов и обновления redis: -
router.post('/create',passport.authenticate('jwt',{session: false}),(req, res)=>{
// check if profile for the user exists or not
Profile.findOne({user: req.user.id})
.then((proifle)=>{
console.log(proifle);
if(!profile){
return res.json({success: false, msg: 'Please create the profile first'});
} else {
// create post
const newPost = new Post({
profile: profile._id,
user: req.user.id,
title: req.body.title,
description: req.body.description,
requiredFunding: req.body.requiredFunding,
date: Date.now()
})
newPost.save()
.then((post)=>{
console.log(post);
// set post in the redis
client.set(JSON.stringify(post._id), JSON.stringify(post));
res.json({success: true, post});
})
.catch((err)=>{
console.log(err);
})
}
})
.catch((err)=>{
console.log(err);
res.status(404).json({success: false, err});
})
});