我们的业务是:用户向我们平台下订单时,需要在redis中更新用户余额,我们是中间平台,上游处理用户的订单返回通知我们,这时我们根据成败来更新mysql余额和redis。 问题来了~~,在高并发下,订单总额与用户的余额有很大出入,原因是在频繁更新redis,存在前后不同步的现象! 请教大神们,对于这种问题怎么处理比较好啊?
client.getAsync(‘freeze’ + orderObj[‘customer_id’]).then(result => { //1.从redis中读取值 if (result) { async.parallel({ updateRedisfreeze: function(done) { //2.更新reids client.incrbyfloatAsync(‘freeze’ + orderObj[‘customer_id’], ‘-’ + orderObj[‘order_fee’]) }, updateCustomer: function(done) { //3.更新数据库记录 customer.update({ customer_feezed_balance: freeze }, { where: { id: orderObj[‘customer_id’] } }) }, createOrder: function(done) { //4.数据库创建新记录 order.create(orderObj) }, deleteOrder: function(done) { client.delAsync(orderNo); /5./删除redis一条记录 } }, function(err, result) { console.log(‘one:’, result.updateRedisfreeze); console.log(‘two:’, result.updateCustomer); console.log(‘three:’, result.createOrder); console.log(‘four:’, result.deleteOrder); }) 在高并发下,怎么做到以上几步类似于数据库事务的操作,保证每次的执行具有原子性?