thinkjs / thinkjs

Use full ES2015+ features to develop Node.js applications, Support TypeScript.
https://thinkjs.org/
MIT License
5.31k stars 616 forks source link

并发导致缓存数据异常 #1396

Closed IMSupperkaka closed 5 years ago

IMSupperkaka commented 5 years ago

OS Platform: linux

Node.js Version: 10.14.1

ThinkJS Version: 3.2.7

code

let getCoupon = await this.model("interface/v3.0.0/xcoupon").getList({
    type: 1
}, order, 'id,cname,name,one_nums,use_condition_money,offer');

getCoupon.map(Res => {
    Res.use_condition_money = Res.use_condition_money / 100;
    Res.offer = Res.offer / 100;
})

more description

高并发情况下 缓存的数据取出异常 导致数据错乱 经过测试发现是缓存的数据没有深拷贝 导致并发情况下数据被处理多次

geyinan945 commented 5 years ago

是的 确实是这样 稍微不注意 一旦并发就会导致数据不正确的问题 这个遇到过很多次了 只能关掉缓存 毕竟不能实时注意深拷贝

lizheming commented 5 years ago

有没有具体的 demo 说说?

welefen commented 5 years ago

@IMSupperkaka https://thinkjs.org/zh-cn/doc/3.0/relation_model.html#toc-839

IMSupperkaka commented 5 years ago

@IMSupperkaka https://thinkjs.org/zh-cn/doc/3.0/relation_model.html#toc-839

嗯嗯 现在目前是关掉了