【发布时间】:2020-03-04 15:58:16
【问题描述】:
我目前正在使用nodejs、sequelize、mysql和reactjs开发服务。
以下代码为一篇文章创建回复。
module.exports.reply = async ({
userId,
postId,
text
}) => {
const t1 = await orm.transaction({
isolationLevel: orm.Transaction.ISOLATION_LEVELS.SERIALIZABLE
});
try {
let retData = { code: 0, data: {}};
const reply = await replyModel.findOne({
where: {
userId: userId,
postId: postId
},
lock: t1.LOCK.UPDATE,
transaction: t1
});
if (reply == null) {
await replyModel.create({
postId: postId,
text: text
}, {transaction: t1});
}
retData.code = 200;
await t1.commit();
return retData;
} catch (err) {
await t1.rollback();
throw err;
}
}
上面的代码是一个为文章创建回复的 POST 请求。
如果我连续点击回复按钮5~10次,就会出现死锁。
为了避免死锁,我隐藏了被点击的按钮。
但是,当回复请求发生多次时,有没有其他方法可以避免服务器端死锁?
【问题讨论】:
标签: mysql node.js sequelize.js deadlock