删除订单问题

来源:4-31 乘客端RR轮询司机接单(二)

颜淮川

2023-06-28

这边按逻辑来讲如果要把订单取消 删除订单,其实直接判断是否存在true然后删除redis缓存 做个这样的事务也行吧(还能保证原子性和时效),也没必要在删除订单里面也要加个乐观锁+事务 重新设置订单 感觉冗余了,而且在多数据情况下,一般几百上千个乘客同时取消订单,也没关系,就算 乘客A并发10次订单当 第一次执行的时候已经把redis删除了,后续缓存再进来看到没有key就会弹出删除失败,况且如果有漏网之鱼冲过redis缓存那就删除订单,撑死删除失败。但是订单数据一定会在第一次请求中删除掉吧

写回答

2回答

神思者

2023-06-28

假设现在乘客要修改订单,但是该订单有其他司机正在抢单,是不是会造成Redis冲突?如果有司机已经抢单成功了,就不能无条件取消订单了。你直接删除Redis缓存的做法是不对的,必须要用Redis事务去提交,如果事务失败,说明有司机接单了,需要额外设置有偿取消订单的功能

0
4
神思者
回复
颜淮川
判不判断起不到什么作用,你现在读取redis时候不存在司机ID,但是你马上要删除redis缓存的间隙,可能司机端已经抢单成功了,缓存订单已经存在司机id了。这种情况只能用Redis事务来解决。事务提交不上去,说明在我操作之前,可定有人改过redis缓存,那就是有司机接单成功了
2023-06-28
共4条回复

颜淮川

提问者

2023-06-28

而且我最搞不明白的一点是删除订单,如果判断的订单存在了,此时突然有司机接单,那么这单是删除呢?还是不删除呢?

0
0

多端全栈项目实战,大型商业级代驾业务全流程落地

50000+代码,300+技术点,慕课网明星讲师为你私人订制

600 学习 · 423 问题

查看课程