收货地址需求

当用户首次创建收货地址时,自动设置为默认地址,之后用户添加新的默认地址或修改其他收货地址为默认收货地址时,原来的默认收货地址变更为非默认地址,如何设计保证在多线程情况下数据不会出错,一般这种需求

阅读 7.3k
6 个回答

数据库加一个字段,判断是否为默认地址。例如:1默认0不默认,让1唯一

address 表加个is_default 字段默认为 0(不是默认) 1(默认)
第一次就读库,如果为空那么这次就是首次添加地址 则 is_default=1 否则为0

新手上路,请多包涵
  1. 数据库加字段,表示是否为默认地址。

  2. 对后台服务中的 取值-设置值 的操作加锁。

一般没有这么做吧,选择收货地址只是方便操作,选择完,订单信息会有一条对应的地址记录,即一个订单对应一个地址、姓名、电话。要不然,像你说的,选择了别的地址,其它的收货地址跟着改,这种需求不合理。

表加字段,或者redis等做缓存,两者还可以结合用:
一个是针对session或当前客户端的,一个是除前者之外的默认

1.多线程出现问题的原因是多个线程的数据不可见性,即多个线程看到的数据都是各自为政的,所以在修改的时候会出现多个默认地址;
2.解决方案:select * from table for update,查询加锁,放在一个事务里,事务结束,锁消除

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题