nodejs使用ioredis和redlock解决并发问题

前段时间刚刚做完一个在线商城的项目,同事说让用jMeter测试一下,结果超过10次请求/秒时数据就已经乱了,后来一番搜索加尝试之后还是使用redlock解决了这个问题,最后测试结果是40次请求/秒左右,基本满足要求。

1.前期准备,服务端安装redis

本文使用oneinstack交互安装,服务器需要安装oneinstack

// 进入oneinstack所在目录
cd /root/oneinstack/
// 运行安装命令
./install.sh --redis

安装完成

运行命令service redis-server status查看启动状态
显示active (running)表示已启动

2.后端代码

安装依赖

// npm i等同于npm install
npm i ioredis redlock

代码中引入

const ioredis = require('ioredis')
const Redlock = require('redlock')
const client = new ioredis()
const redlock = new Redlock([client])

使用redlock

router.post('/test',  async function (ctx, next){
  let lock = null
  try {
    // 请求锁 // 第一个参数是锁的名称,第二个是锁的有效期
    lock = await redlock.lock('lock', 10000)
    //业务逻辑代码
    ······
    // 返回成功信息
    ctx.body = {
      code: 200,
      msg: '成功'
    }
    // 释放锁
    lock.unlock()
  } catch (e) {
    console.log('请求锁失败', e)
    lock = null
    // 返回错误信息
    return ctx.body = {
      code: 500,
      msg: '服务器繁忙,请稍候再试'
    }
  }
})

注:本地运行服务时需要手动运行redis-server,所以也需要安装redis。
参考:windows环境安装redis

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。