Xiaodong.Li

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

redisLockTest

//redis.js
var redis = require('redis');
var redislock = require('redislock');
var client = redis.createClient('127.0.0.1',6379);
exports.lockPlayer = function(key, callback){
    var playerlock = redislock.createLock(client);
    playerlock.acquire(key+":lock", function (err) {
        callback(err,playerlock);
    });
}
exports.releasePlayerLock = function(playerlock,callback){
    playerlock.release(function (err) {
        callback(err);
    });
}
//redisUtil.js
var async = require('async');
var redisUtil = require('../redis.js');
var async = require('async');
//1
var playlock ;
async.waterfall([
    function (cb) {
        redisUtil.lockPlayer('lock_xiaodong', function (err,data) {
            console.log('lock player error:',err);//null
            if(!err && !!data){
                playlock = data;
            }
            cb(err);
        });
    },
    function (cb) {
        setTimeout(function () {
            redisUtil.lockPlayer('lock_xiaodong', function (err,data) {
                console.log('lock player error1:',err);//null
                if(!err && !!data){
                    playlock = data;
                }
            });
        },10000);
        cb();
    },
    function (cb) {
        redisUtil.releasePlayerLock(playlock, function (err) {
            console.log('release player lock error:',err);//null
            cb(err);
        });
    }
], function (err) {
    if(!!err){
        redisUtil.releasePlayerLock(playlock, function (err) {
            console.log('release player lock error1:',err);
        });
    } else {
        console.log('lock and release lock success!!');
    }
});
//2
async.waterfall([
    function (cb) {
        redisUtil.lockPlayer('lock_xiaodong', function (err,data) {
            console.log('lock player error:',err);
            if(!err && !!data){
                playlock = data;
            }
            cb(err);
        });
    },
    function (cb) {
        //error cannot acquire
        redisUtil.lockPlayer('lock_xiaodong', function (err,data) {
            console.log('lock player error1:',err);
            if(!err && !!data){
                playlock = data;
            }
            cb(err);
        });
    },
    function (cb) {
        redisUtil.releasePlayerLock(playlock, function (err) {
            console.log('release player lock error:',err);
            cb(err);
        });
    }
], function (err) {
    if(!!err){
        /*
        { [LockAcquisitionError: Could not acquire lock on "lock_xiaodong:lock"]
            name: 'LockAcquisitionError',
                message: 'Could not acquire lock on "lock_xiaodong:lock"' }
        */
        redisUtil.releasePlayerLock(playlock, function (err) {
            console.log('release player lock error1:',err);
        });
    } else {
        console.log('lock and release lock success!!');
    }
});
posted on 2016-06-08 14:14  Xiaodong.Li  阅读(259)  评论(0)    收藏  举报