`
san_yun
  • 浏览: 2655077 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

并发的常见问题和对应的解决方案

阅读更多

1、 最简单的,页面的《提交》按钮,在点击后(校验通过后)Disabled ,这样用户就不会重复点击《提交》按钮;

2、 数据库表增加唯一性索引(比如memberId ),这个只能解决一般(为什么一般,继续看)并发插入的问题;

如果两条一样的数据插入,只有一条会成功,另外一次插入失败;

3、 使用乐观锁,在Table 里增加一个version int 字段,这个可以保证更新操作的并发问题;

Select version, .. from table1 where id=?

//do biz

Update set version=version+1 where id=? And version=?

在代码里,需要判断update 返回的更新条数(count ==1?true:false )来判断本次更新是否成功

4、 使用悲观锁,一般使用数据库提供的功能(不建议);

select for update (悲观锁)

//do biz

Update ( 事物提交,锁释放)

5、 有时候,数据库不能加唯一性索引(比如由memberId,status 两个字段,业务要求memberId,status=approved 的数据唯一,其他状态的数据不做限制);

这个时候,需要寻求新的协调中心(之前是数据库光荣的承担这一角色),我们现在使用的Memcached 可以完成这个任务,利用memcached 协议规定add 的原子性,详细请点击这里

我们在信联项目里使用了这个方案,有一个缺点,就是需要侵入到业务代码里来控制并发,参考代码:     

方式1- 回调(推荐):

 try {

     concurrentTemplate.execute(key, new ConcurrentCallback() {

         public Object doInConcurrent() {

             // do your biz

             return null;

         }

     });

} catch (ConcurrentException e) {

     // catch this exception

     // return value;

}

方式二:自助获取和释放锁

 ConcurrentLock lock = null;

try {

     lock = concurrentTemplate.acquireLock(key);

     // do your biz

} catch (ConcurrentException e) {

     // catch this exception

     // return value;

} finally {

     concurrentTemplate.releaseLock(lock);

}

更多实现,请参考

http://svn.alibaba-inc.com/repos/ali_cn/olps/credit_shared/trunk/common/concurrent

6、 上面的故障4 案例,以上方案都解决不了,这个需要从设计入手来解决此问题,此方案敬请期待宝委会最近的案例分享;

 

写在最后

      随着我们现在系统的复杂性上升,在我们的设计上,必须要考虑并发问题 ,接下来我们会在《设计文档模板》上,增加并发这一章节的hit ,以提醒大家;

      同时,测试同学也需要提高并发方面的测试意识。

      同理,下次再出并发引起的故障,那就需要新的解释理由了。

分享到:
评论

相关推荐

    Java系统的高并发解决方法详解

    在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面,还没法根本解决大型网站面临的高负载...

    高并发场景下的缓存+数据库双写不一致问题分析与解决方案设计.docx

    高并发场景下的缓存+数据库双写不一致问题分析与解决方案设计。 在高并发场景下,缓存和数据库的双写不一致问题是一个常见的问题。这种问题的出现是因为在高并发场景下,缓存和数据库的写操作可能会出现不一致的...

    高并发业务场景下的秒杀解决方案.docx

    总的来说,高并发业务场景下的秒杀解决方案通过Redis的队列技术和原子操作,能够有效地防止超卖问题,同时通过优化策略提高系统的稳定性和效率。在设计类似系统时,还需要考虑其他因素,如系统的扩展性、容错性和...

    100例常见错误及解决方案.zip

    在IT行业中,尤其是在Java编程领域,开发者经常遇到各种各样的问题和错误。"100例常见错误及解决方案....在实际工作中遇到问题时,可以参考这些案例,迅速找到对应的解决方案,从而减少开发时间,提高项目交付的效率。

    性能测试常见的问题及解决方案

    以下是对这些问题的详细讨论及其解决方案: 1. CPU过高: - 通过`vmstat`实时监控CPU使用情况,如果AP CPU超过60%的指标,需进行分析。 - 区分use CPU和sys CPU,如果是use CPU过高,通常意味着应用程序消耗过多...

    互联网延迟队列解决方案设计.pdf

    首先,针对延迟任务处理问题,解决方案大致可以分为三类: 1. 基于编程语言的解决方案:这种方案通常使用编程语言中提供的定时器、延时队列等组件。例如,Java中的Timer和DelayQueue,可以实现简单的延迟任务。但...

    Javascript解决方案的问题在LeetCode.zip

    在解压后的文件中,每个JavaScript文件可能对应LeetCode的一个特定问题,通过阅读和学习这些解决方案,你可以加深对上述知识点的理解,提升编程能力和问题解决技巧。同时,不断实践和优化代码,有助于在实际工作中更...

    IBM EAI电信业务支撑系统的EAI架构规划及IBM解决方案

    常见的接口适配器包括基于API的适配器、数据库适配器和消息队列适配器,它们各自对应不同的集成需求。 5. 流程补偿机制的实现——保证交易的一致性 为了确保交易的原子性和一致性,流程补偿机制通过回滚不完整或...

    XtremIO数据库基础架构解决方案.pptx

    它旨在解决传统数据库环境中常见的性能问题,尤其是在处理高并发、随机I/O以及大数据量时遇到的挑战。在传统的数据库架构中,磁盘和RAID类型、缓存以及分层存储策略可能无法充分应对日益增长的数据和随机性,导致...

    案例实战-高并发业务的多级缓存架构一致性解决方案

    本案例实战主要探讨如何解决在高并发场景下,采用多级缓存架构实现数据一致性的问题。在这个主题中,我们将深入理解多级缓存的概念、作用以及一致性策略。 首先,我们来解释一下什么是多级缓存。多级缓存是指在应用...

    微服务主题系统_分布式事务领域知识及常见解决方案

    常见的分布式事务解决方案包括: 1. 两阶段提交(2PC):协调者和参与者两阶段交互,决定是否提交事务。但在网络延迟或协调者故障的情况下可能导致阻塞。 2. 三阶段提交(3PC):2PC的改进版,增加了预提交阶段,...

    并发测试工具

    在IT行业中,性能测试是确保系统在高压力环境下能够正常运行的关键环节,而JMeter因其易用性、灵活性和跨平台特性,成为了许多企业和开发者首选的并发测试解决方案。 JMeter的安装过程首先要求安装Java Development...

    如何快速实现高并发短文检索

    #### 常见潜在解决方案分析 1. **数据库搜索法** - **具体方法**:将标题数据存放在数据库中,通过`LIKE`语句进行模糊匹配。 - **优点**:实现简单,易于理解和部署。 - **缺点**:不支持分词;面对高并发时...

    Tomcat安装与配置要点和难点以及常见报错和解决方案.zip

    五、常见报错与解决方案 1. “找不到或无法加载主类”:检查环境变量是否正确设置,尤其是CLASSPATH。 2. “404错误”:可能是应用没有正确部署,确认应用目录结构是否符合规定,或在server.xml中添加正确的Context...

    Seata是一种易于使用高性能基于Java的开源分布式事务解决方案

    3. Saga模式:针对长事务的一种解决方案,通过将一个长事务分解为一系列独立的子事务,每个子事务都对应一个补偿操作。如果某个子事务失败,可以回滚前面成功的子事务,保证事务的最终一致性。 4. XA两阶段提交:...

    SDE:各种SDE问题和解决方案的解决方案

    "SDE:各种SDE问题和解决方案的解决方案"这个资源显然旨在为遇到问题的开发人员提供帮助,主要关注C++相关的问题。下面我们将深入探讨C++中可能出现的一些常见问题以及相应的解决方案。 1. **内存管理**: C++中,...

    【Redis】缓存的三大问题及其解决方案.docx

    ### Redis缓存的三大问题及其解决方案 ...以上介绍了Redis缓存中常见的两种问题——缓存穿透和缓存击穿,以及针对这些问题的解决方案。在实际应用中,应根据具体的业务场景选择合适的策略,以提高系统的稳定性和性能。

    C#软件解决方案(源代码)

    《C#软件解决方案》源代码提供了丰富的学习资源,适合初学者深入理解C#编程语言。这个教程通过一系列章节,逐步引导读者掌握C#的核心概念和技术。每个章节对应一个压缩子文件,分别是chap10至chap12以及chap02到chap...

    Oracle数据库应用问题与解决方案分析.pdf

    然而,在实际应用中,Oracle数据库可能会遇到一系列问题,影响其正常运行和效率。 1. **表空间数据删除问题**:Oracle数据库的表空间是数据存储的基本单位,删除表空间时需要遵循特定的顺序。如果直接删除数据文件...

    Java分布式session存储解决方案图解

    本文将详细介绍四种常见的Java分布式session存储解决方案:Session Sticky、Session Replication、Session 数据集中存储和Cookie Based。 1. Session Sticky Session Sticky 方案是指将客户端的每次请求都转发至同...

Global site tag (gtag.js) - Google Analytics