我想在nodejs的书Patterns of Enterprise Application Architecture中实现Martin Flower的序列生成器组件,并将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,还有办法吗?以及如何?
答案 0 :(得分:0)
我需要以阻塞方式访问nodejs中的redis而不是 异步方式
我不知道是否有一个带有同步API的redis库,但请记住,它可能会为您的整个应用程序带来潜在的瓶颈,因为您将阻止它直到您的同步操作完成,这与节点上的习语有关的.js。
有办法吗?怎么样?
您可以尝试通过transaction执行“无逻辑”命令集,或者从redis版本2.6开始,可以直接在redis端execute lua scripts执行此操作,这可能是一种方法。您不仅可以从node.js应用程序中卸载一些操作,还可以保存多个往返,但脚本将以redis原子方式执行,您无需处理应用程序中多个回调的管理。