CNode

看cnode的代码有个去redis取缓存的问题

问答
Cchong0808发布于8 年前最后回复8 年前1 回复3136 浏览0 收藏

'./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)

E
eggggger#1·8 年前

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

参与回复
登录后即可参与回复。登录