看cnode的代码有个去redis取缓存的问题
在
'./controllers/site'
里有个代码是这样写的
// 取排行榜上的用户
cache.get('tops', proxy.done(function(tops) {
if (tops) {
proxy.emit('tops', tops);
} else {
User.getUsersByQuery({ is_block: false }, { limit: 10, sort: '-score' },
proxy.done('tops', function(tops) {
cache.set('tops', tops, 60 * 1);
return tops;
})
);
}
}));
这个应该是先去redis里面取缓存数据,但是怎么样可以在高并发的时候 只有一个人去数据库里面取呢? 查了下说,可以加个锁,但是在锁的过程中,第二个请求过来的时候,没拿到锁的时候,第二个请求接下来要怎么处理? 想不到,直接返回错误吗?
1 回复
返回错误,轮询锁,事件通知