0

Martin Flower のSequence Generatorコンポーネントを彼の著書Patterns of Enterprise Application Architecture in nodejs に redis をバックエンドとして実装したいと考えています。

例えば。

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 に答える