业务场景

1.有这样兑奖的活动,【活动1】小票满指定金额换奖品,【活动2】买饮料,瓶盖暗码兑奖

第一步,【校验按钮】拍身份证图片,获取身份证信息;输入小票号或输入暗码,校验是否被使用过(查询是否存在记录);暗码是否有效(提前初始化到暗码表)

第二步,【确认按钮】第一步校验通过,新增兑奖记录,更新暗码状态。

风险点是小票号或暗码是否会被重复使用,类似并发问题

异常场景

同一个小票或者暗码,两个人同时操作,第一步都校验通过了(无记录),再去确认操作,可能导致,小票或暗码被重复使用,正常新增了记录,更新了暗码状态

解决方案

新增时记录表加唯一索引(小票号),更新状态加乐观锁(暗码)

这样就算第一步校验都通过了,新增小票记录时,可捕获唯一索引异常,抛异常,提示小票已被使用,更新暗码状态条件是原始状态是0有效才更新,判断返回值是否为1,是更新成功,否,暗码已被更新,提示暗码已被使用。

拓展方案:加redis分布式锁

疑问

1.新增或者修改,有必要判断返回值是否为1,说明是否成功吗?

新增:什么场景下会不等1,失败的情况,新增时如果加了唯一索引,直接抛异常,判断是否为1没意义,不知道是否存在其他场景新增失败

修改:加了乐观锁,必须要判断是否等于1,来给出提示。

2.大数量新增或批量更新怎么处理

新增:分批操作,捕获异常,打印ERROR日志,或者写入错误日志表

修改:打印ERROR日志,或者写入错误日志表

关于校验与确认两步操作时,新增,修改需要考虑的问题相关推荐

  1. 两步操作解决Python3中openCV库安装难题(清华大学镜像源)

    两步操作解决Python3中openCV库安装难题 ways1:whl文件+pip安装: step1:下载whl包: 清华大学的下载库: https://mirrors.tuna.tsinghua.e ...

  2. 两步教你Linux修改主机名

    Linux修改主机名,网上许多教程写的都比较复杂,什么又要修改网络配置.hosts等. 实际上Linux修改主机名可简单通过如下两步完成: 1.临时性修改Linux主机名:hostname 新主机名 ...

  3. 采购订单的“确认”操作--一步与两步操作

  4. 计算机音乐教程图片大全,图片+音乐做成视频简单两步操作,一图流音乐视频制作教程...

    一张唯美的图片.一首悦耳动听的音乐,两者合并成一个静态视频,这就是传说中的一流图.其实网上视频制作教程实在是太多了,小编今天推荐的这款图片视频制作工具主要是为了让狸友减少那些繁杂的操作步骤,可以让你简 ...

  5. 量子:基于EPR块对的两步量子直接通信

    学习论文: 题目:Two-step quantum direct communication protocol using the Einstein-Podolsky-Rosen pair block ...

  6. 两步实现在C代码中快速集成gtest进行单元测试

    我平时的技术支持工作主要是快速阅读和调试代码,没有太多的代测试和验证需求,所以对单元测试一直没有留意. 直到我开始从头写一些密码学的基本功能代码,例如各种哈希算法,分组密码算法,流密码算法,分组密码的 ...

  7. ERP实施-采购业务集成(103和105移动类型两步入库)

    业务场景为SAP ERP系统与仓储业务系统集成,核心集成分两步: 创建.修改.删除采购订单时,可在BADI的增强出口ME_PURCHDOC_POSTED触发订单同步: 在POST方法中调用接口,根据O ...

  8. 这样才能使本地Mysql服务允许被外部主机连接(两步)

    网上的N多方法都不全面,只有下面的第一步或第二步是不行的,必须同时执行下面两步操作: 修改mysql.user表 以root或debian-sys-maint身份登录mysql $ mysql -u ...

  9. 用Abp实现两步验证(Two-Factor Authentication,2FA)登录(二):Vue网页端开发

    文章目录 发送验证码 登录 退出登录 界面控件 获取用户信息功能 项目地址 前端代码的框架采用vue.js + elementUI 这套较为简单的方式实现,以及typescript语法更方便阅读. 首 ...

  10. Git 高频命令、版本回退、分支操作、文件修改删除、撤销、标签、远程仓库推送、拉取

    1. 高频命令 git add 将工作文件修改提交到本地暂存区. git add . 将所有修改过的工作文件提交暂存区(常用). git commit -m "XXX" 为本次修改 ...

最新文章

  1. ON TOP-N and pagination queries
  2. Qt文档阅读笔记-写一个简单的单元测试
  3. 浏览器安全与MSAA
  4. 直播丨数据安全:Oracle多场景下比特币勒索的揭密与恢复实战
  5. WPF TreeView IsExpanded 绑定不上的问题
  6. 大数据之-Hadoop3.x_MapReduce_Job提交流程---大数据之hadoop3.x工作笔记0103
  7. Web---session技术代码演示(request,session,servletContext)
  8. 数学建模之规划模型(一)
  9. mysql 5.5 字符集_MySQL 5.5客户端字符集相关参数
  10. JAVA打印中文乱码问题
  11. ipad上能够编辑python_10 个可以在平板电脑上使用的 Python 编辑器
  12. win10计算机文件夹隐藏,Win10此电脑6个文件夹隐藏方法
  13. 苹果手机怎么在照片上添加文字_手机上照片怎么制作视频
  14. 关于iphone的双重验证的虚伪本质
  15. SAP软件ERP系统简介
  16. scrapy的spider中为什么使用yield
  17. 【一步步学OpenGL 19】 -《镜面反射光》
  18. 解决安装pycrypto时的各种问题/安装失败
  19. 亚丁号自动阅读第一次更新
  20. 光纤激光器仿真: (1)耗散孤子以及耗散孤子共振

热门文章

  1. oracle中的函数
  2. SqlBulkCopy做大数据插入
  3. Linq to Oracle 使用教程目录
  4. ArcGIS Server(详细介绍)转
  5. Forms 凭票验证
  6. 跟踪slab分配堆栈流程的方法(perf、systemtap)
  7. Android 学习之补间(Tween)动画
  8. cut最后几位 shell_shell中字符串截取命令:cut,printf,awk,sed
  9. generic_make_request函数处理bio流程分析
  10. OmniCppComplete实现C代码自动补全