前段时间刚刚做完一个在线商城的项目,同事说让用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