节点js中的重锁错误

时间:2016-04-14 14:41:01

标签: javascript node.js redis locking

我正在尝试使用redlock模块,但我遇到了一个我无法解决的错误。

以下是我的redlock文件的样子:

return (
    <p>text</p>
    <p>text</p>
    <p>text</p>
);

当我尝试从另一个模块调用lockRessource函数时,出现错误:

2016-04-14T16:28:55.020 - info:TypeError:无法读取undefined属性'set'     根据要求(/usr/app/node_modules/redlock/redlock.js:260:18)     在/usr/app/node_modules/redlock/redlock.js:314:12     at Array.forEach(native)     在尝试时(/usr/app/node_modules/redlock/redlock.js:313:24)     在/usr/app/node_modules/redlock/redlock.js:318:10     在Promise._execute(/usr/app/node_modules/redlock/node_modules/bluebird/js/release/debuggability.js:272:9)     在Promise._resolveFromExecutor(/usr/app/node_modules/redlock/node_modules/bluebird/js/release/promise.js:474:18)     在新的承诺(/usr/app/node_modules/redlock/node_modules/bluebird/js/release/promise.js:77:14)     在Redlock._lock(/usr/app/node_modules/redlock/redlock.js:249:9)     在Redlock.lock(/usr/app/node_modules/redlock/redlock.js:111:14)     at Object.module.exports.lockRessource(/usr/app/redisdata.js:42:10)

你知道这可能来自哪里吗?看起来我对这个模块没有做任何疯狂的事情。

非常感谢!

1 个答案:

答案 0 :(得分:0)

分配客户端后,

初始化红锁。

您的redlock文件如下所示:

var redis = require('redis');
var Redlock = require('redlock');
var logger = require('./logger.js');

var client;
var redlock;

module.exports.redisConnection = function(port,host){
    client = redis.createClient(port,host);
    redlock = new Redlock(
        [client],
        {
            driftFactor : 0.01,
            retryCount : 15,
            retryDelay : 200
        }
    );

    client.on('connect',function(){
        logger.info("Redis default connection open to "+host+":"+port);
    });

    client.on('error',function(err){
        logger.info("Redis default connection error "+err);
        logger.info("Redis Path : "+host+":"+port);
    });

    redlock.on('clientError', function(err) {
        logger.info("A Redis Error Has Occurred : "+err);
    });

    process.on('SIGINT', function() {
        client.quit();
        logger.info("Redis default connection disconnected");
        process.exit(0);
    });
};

module.exports.lockRessource = function(ressource_id,callback){
    redlock.lock(ressource_id,2000,function(err,lock){
        if(err){
            callback(err,null);
        }
        else{
            callback(null,lock);
        }
    });
};

module.exports.unlockLock = function(lock,callback){

    lock.unlock(function(err){
        if(err){
            callback(true,null);
        }
        else{
            callback(null,true);
        }
    });
};

如果要使用该模块,请先调用redisConnection 假设上面文件的名称是“redlock.js”。

resource = require('./redlock.js')

resource.redisConnection(6379, "127.0.0.1")
resource.lockRessource("your resourceId", function(err, lock) { })