看cnode的代码有个去redis取缓存的问题
发布于 6 年前 作者 chong0808 2379 次浏览 来自 问答

'./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 回复

返回错误,轮询锁,事件通知

回到顶部