解决并发保证数据一致性、幂等性方案

解决高并发、保证数据一致性、幂等性的方案

基本思路:在每次请求服务之前,先必须调用"令牌服务",获得一个唯一的令牌,然后再带上令牌ID这个参数去调用相关的服务。由于这个令牌ID是唯一的,所以,这样可以有效的防止同一个业务多次执行。

具体步骤如下:

step1.首先在数据库中创建一个存放令牌相关信息的表open_ticket;

step2.定义调用令牌服务的参数:至少包括 操作用户、业务编号、业务场景类型;

step3.定义获取"令牌"的服务TicketDTO builderTicket(TicketCreateParam ticketCreateParam)

a.检查创建参数的完整性;

b.检查当前唯一业务编号令牌是否已经创建;

c.TicketDTO newTicket = builder(ticketCreateParam);

step4.调用相关业务服务执行成功后更新令牌信息的状态为成功。

说明:一般在电商项目中,这种高并发是很常见的,为了防止同一个业务被多次执行,比如一个订单可能被多次支付,重复扣钱,我们就可以通过这个方案有效的避免,比如当同一个订单第二次进行支付时,由于订单号和上一次相同,业务类型也是订单支付,所以在调用"令牌服务"时,会被检查到此业务已经创建过令牌ID,且状态还是受理中,这时,创建令牌服务信息就会失败,直接返回,后面的支付操作就不会被执行到了

时间: 2024-10-14 10:25:31

解决并发保证数据一致性、幂等性方案的相关文章

SQL锁表解决并发性

在数据库开发过程中,不得不考虑并发性的问题,因为很有可能当别人正在更新表中记录时,你又从该表中读数据,那你读出来的数据有可能就不是你希望得到的数据.可以说有些数据同时只能有一个事物去更新,否则最终显示给用户的数据不是数据库中现存的数据.锁表就限制不同的事物在同一时间内不允许同时操作一张表,实例很简单,可以用select来锁定整张表,那别人就不可能更新或是读取表的记录.select * from dbo.Employee with(holdlock); with关键字来设置锁表的方式.下面是wit

docker解决数据存储问题的方案

如今docker在云计算领域发展的势头非常猛,各个公司不论大小都開始研究这个开源工具和技术.环绕docker的开源项目和创业公司也多如牛毛,就是一个简单管理container的web ui都有非常多开源项目.只是还是一个人说的好.docker必须要是集群才好玩.并且越大越好玩. 当然这是从玩技术的人眼中看待的问题,假设要真正用于生产还是有非常多问题须要解决,非常多方案须要设计,非常多容错须要处理. 今天看资料学习到了docker是如何解决容器里面数据存储的问题的方案,曾经做PAAS遇到过这样的问

大数据高并发系统架构实战方案

大数据高并发系统架构实战方案(LVS负载均衡.Nginx.共享存储.海量数据.队列缓存 ) 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练.通过该课程的学习,普通的技术人员就可以快速搭建起千万级的高并发大数据网站平台,课程涉及内容包括:LVS实现负载均衡.Nginx高级配置实战.共享存储实现动态内容静态化加速实战.缓存平台安装配置使用.mysql主从复制安装配置实战等.课程二十.

PHP解决并发问题的几种实现

对于商品抢购等并发场景下,可能会出现超卖的现象,这时就需要解决并发所带来的这些问题了 在PHP语言中并没有原生的提供并发的解决方案,因此就需要借助其他方式来实现并发控制. 方案一:使用文件锁排它锁 flock函数用于获取文件的锁,这个锁同时只能被一个线程获取到,其它没有获取到锁的线程要么阻塞,要么获取失败 在获取到锁的时候,先查询库存,如果库存大于0,则进行下订单操作,减库存,然后释放锁 方案二:使用MySQL数据库提供的悲观锁 Innodb存储引擎支持行级锁,当某行数据被锁定时,其他进程不能对

Java高并发的常见应对方案

Java高并发的常见应对方案 一.关于并发我们说的高并发是什么? 在互联网时代,高并发,通常是指,在某个时间点,有很多个访问同时到来. 高并发,通常关心的系统指标与业务指标? QPS:每秒钟查询量,广义的,通常指指每秒请求数 响应时间:从请求发出到收到响应花费的时间,例如:系统处理一个HTTP请求需要100ms,这个100ms就是系统的响应时间 带宽:计算带宽大小需关注两个指标,峰值流量和页面的平均大小 PV:综合浏览量(Page View),即页面浏览量或者点击量,通常关注在24小时内访问的页

高并发的常见应对方案

一.关于并发我们说的高并发是什么? 在互联网时代,高并发,通常是指,在某个时间点,有很多个访问同时到来. 高并发,通常关心的系统指标与业务指标? QPS:每秒钟查询量,广义的,通常指指每秒请求数 响应时间:从请求发出到收到响应花费的时间,例如:系统处理一个HTTP请求需要100ms,这个100ms就是系统的响应时间 带宽:计算带宽大小需关注两个指标,峰值流量和页面的平均大小 PV:综合浏览量(Page View),即页面浏览量或者点击量,通常关注在24小时内访问的页面数量,即"日PV"

锁是用来解决并发问题

共享锁,又称为读锁,获得共享锁之后,可以查看但无法修改和删除数据. 排他锁,又称为写锁.独占锁,获得排他锁之后,既能读数据,又能修改数据. 为什么要加锁 很多人都知道,锁是用来解决并发问题的,那么什么是并发问题呢?并发情况下,不加锁会有什么问题呢? 拿生活中的洗手间举例子,每个洗手间都会有一个门,并且是可以上锁的,当我们进入洗手间之后会把门反锁,当我们出来之后再把锁打开. 当门被锁上之后,其他人只能在门外等待.洗手间之所以要有门锁,就是为了保护隐私的,避免出现多个人同时进入洗手间的情况. 这和数

C#解决并发的设计思路

解决并发的方案,应用场景,一个报名的方法,可是要限制报名的人数:一,如果是单机版,就是部署一个服务器站点的我们可以使用很经典的lock锁,或者queue队列,针对单机版二,如果是部署了集群的站点1>我们可以利用redis的单线程的特点,定义一个redis值,并发去取这个值来判断人数的多少2>利用队列kafka,rabbitmq或者微软的MSMQ,具体实现逻辑:1,在报名方法插入队列2,写一个window服务,去执行队列的,报名 原文地址:https://www.cnblogs.com/May-

EntityFramework Core解决并发详解

话题(EntityFramework Core并发) 对于并发问题这个话题相信大家并不陌生,当数据量比较大时这个时候我们就需要考虑并发,对于并发涉及到的内容也比较多,在EF Core中我们将并发分为几个小节来陈述,让大家看起来也不太累,也容易接受,我们由浅入深.首先我们看下给出的Blog实体类.     public class Blog : IEntityBase     {        public int Id { get; set; }        public string Nam