0

我想在以 redis 作为后端的 nodejs中实现 Martin Flower 的《企业应用程序架构模式》一书中的序列生成器组件。

例如。

var redisClient = ...;
var count = redisClient.get('count');
var stepSize = 1000;
var initCount = 0;
count = count ? count : initCount;
var counterMax = count + stepSize;
redisClient.set('count', counterMax);
var counter = function(){
    ++count;
    if(count>=counterMax){
        counterMax = count + stepSize;
        redisClient.set('count', counterMax);
    }
    return count;
}
module.exports = {
    nextValue: counter
}

在我的客户中,我将使用:

var seq = require(./sequence);

app.get('/', function(req, res){
    var token = seq();
    if( req.cookies.userToken ){
        res,cookie( 'userToken', token );
    }

    ....

});

我需要以阻塞方式而不是异步方式访问nodejs中的redis,有办法吗?如何?

4

1 回答 1

0

我需要以阻塞方式而不是异步方式访问nodejs中的redis

我不知道是否有一个带有同步 API 的 redis 库,但请记住,它可能会给你的整个应用程序带来潜在的瓶颈,因为你会阻止它,直到你的同步操作完成,这违反了 node.js 上的习惯用法。

有办法吗?如何?

您可以尝试通过事务执行“无逻辑”命令集,或者从 redis 2.6 版开始,可以直接在 redis 端执行 lua 脚本,这可能是适合您的一种方式。您不仅可以从 node.js 应用程序中卸载一些操作,从而节省多次往返,而且脚本将在 redis 中以原子方式执行,您无需处理应用程序中的多个回调管理。

于 2013-06-15T10:05:25.050 回答