nodejs 并发请求查询数据库 返回多个重复状态

(https://cnodejs.org/topic/53e4984371470ac05511fa87#5608d7e9148959375f34ff73)

var index = parseInt(Math.random() * 4);var events= require('events');var x = new events.EventEmitter();var jpCount = 5; //conn.query(“select * from giftinfo” , function(row){ })x.on('lingjiang',lingjiangHandle);function lingjiang(user) { if (jpCount > 0){ x.emit('lingjiang', user); } else { console.log('奖品已领玩'); }}lingjiangHandle = function(user) { jpCount --; if (lingjiangSucceed) { console.log(user + '领奖成功'); } else { console.log(user + '领奖失败'); jpCount++; }}

这么做是不正确的。
很明显,你对数据库做了写操作,单单查询来判断是不够的。必须修改数据库成功,才能为用户颁发奖品,如果失败,则意味奖品不存在。
还有一种就是同步缓存,在nodejs服务器记录一个奖品数作为查询和递减,数据库服务器只负责修改。但是nodejs服务器挂掉会导致这个缓存消失,每次重新启动nodejs服务器,需要先去数据库服务器确认当前可以领的奖品数。
mongodb是存在写锁的。

我的解决方法, 查询后, 直接更新数据库状态, 然后发放奖励.

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

推荐阅读更多精彩内容