Redlock 分布式锁

Redlock

一款基于redis实现的分布式锁的nodejs包

Github地址

基本实现方式

初始化

// redlock支持node redis, ioredis 或者 其他的redis包
var client1 = require('redis').createClient(6379, 'redis1.example.com');
var client2 = require('redis').createClient(6379, 'redis2.example.com');
var client3 = require('redis').createClient(6379, 'redis3.example.com');
var Redlock = require('redlock');

var redlock = new Redlock(
	// 支持单机或集群
	[client1, client2, client3],
	{
		// 预期的偏移时间
		// see http://redis.io/topics/distlock
		driftFactor: 0.01, // time in ms

		// 尝试获取锁的次数,之后报错
		retryCount:  10,

		// 尝试获取锁的时间间隔,单位ms
		retryDelay:  200,

		retryJitter:  200 // time in ms
	}
);

获取锁和释放锁

// 锁id
var resource = 'locks:account:322456';

// 持有锁的最大时长,也可以使用extend函数延时
var ttl = 1000;
// 获取锁
redlock.lock(resource, ttl).then(function(lock) {

	// 业务代码

	// 释放锁
	return lock.unlock()
	.catch(function(err) {
		// 当连接不到redis时,持有的锁会过期,并且报错
		console.error(err);
	});
});

延时处理

redlock.lock('locks:account:322456', 1000).then(function(lock) {

	// 业务代码

	// 如果还需要处理其他业务逻辑,可以使用extend函数延长锁的持有时间,并且可以一直循环延时
	return lock.extend(1000).then(function(lock){

		// 业务代码

		// 释放锁
		return lock.unlock()
		.catch(function(err) {
			// 当连接不到redis时,持有的锁会过期,并且报错
			console.error(err);
		});
	});
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bdawn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值