1.0.0 • Published 5 years ago

egg-redlock-plugin v1.0.0

Weekly downloads
2
License
MIT
Repository
github
Last release
5 years ago

egg-bt-egg-redlock

NPM version build status Test coverage David deps npm download

依赖说明

依赖的 egg 版本

egg-bt-egg-redlock 版本egg 1.x
1.x😁
0.x

开启插件

// config/plugin.js
exports.locker = {
  enable: true,
  package: 'egg-redlock',
};

使用场景

当你知道你的数据库可能不能承受很大的并发,但是你的项目却没有一个好的办法去控制请求的并发量,毕竟nodejs是异步IO,这个时候,你需要一个工具,为你的方法添加一个控制并发量的锁。

Usage

在你的任何Controller或者Service中,都可以很方便的添加锁,以下是一个示例:

// controller/user.js
'use strict';
const { Controller } = require('egg');
class UserController extends Controller {
  async userDo() {
    const { ctx, service } = this;
    await ctx.lock('userDoResource', 300, 10);
    await service.user.userDoSomething();
    await ctx.unlock('userDoResource');
  }
}
module.exports = UserController;

/**
 * ctx.lock(resource, maxLocker, ?ttl)
 *  resource: 资源名称
 *  maxLocker: 最多几个请求可以获取到锁
 *  ?ttl: 可选参数,锁的超时时间
 * 
 * ctx.unlock(resource)
 *  resource: 资源名称
 * /

用法就是这么简单,接下来所有路由到 Userdo 这个控制器的请求,最多只能有300个请求同时访问业务层的userDoSomething() 方法。

  • ctx.lock = ctx.acquire: 获取锁方法
  • ctx.unlock = ctx.release: 释放锁方法

详细配置

请到 config/config.default.js 查看详细配置项说明。

单元测试

提问交流

请到 issues 异步交流。