- 浏览: 2655077 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
并发的常见问题和对应的解决方案
- 博客分类:
- 多线程
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 ,以提醒大家;
同时,测试同学也需要提高并发方面的测试意识。
同理,下次再出并发引起的故障,那就需要新的解释理由了。
发表评论
-
JVM锁实现探究:synchronized初探
2014-03-26 12:40 5883原文: http://www.majin163.com/2 ... -
ThreadPoolExecutor入门
2013-08-21 16:09 970一、corePoolSize和maximumPoolSiz ... -
SynchronousQueue
2013-07-07 22:02 1571SynchronousQueue 一种阻塞队列,其中每个 ... -
深入JVM锁机制2-Lock
2013-07-07 00:47 873前文(深入JVM锁机制-synchronized)分析了JV ... -
深入JVM锁机制1-synchronized
2013-07-07 00:34 908目前在Java中存在两种锁 ... -
java与python多线程wait,notify操作比较
2013-07-06 23:36 2236wait 和notify的应用场景 在学习wait,no ... -
Java中容易踩到的“坑”系列之线程池篇
2013-03-29 13:49 2847原文:http://hellojava.info ... -
淘宝工程师分享并发系列文章
2012-12-31 00:11 28聊聊并发(一)深入分析Volatile的实现原理 ... -
一种高效无锁内存队列的实现
2012-11-25 02:20 96Disruptor是LMAX公司开源的一个高效的内存无 ... -
HashTable, hashmap ,ConcurrentHashMap
2012-11-18 23:20 1077http://www.ibm.com/developerwor ... -
并发编程文档集合
2012-11-04 21:54 0【并发编程】深入研究并发编程 【并发编程】深入分析V ... -
exodus2线程总结
2012-08-26 18:25 515现象描述 exodus2在启动不久后就挂住,用kill -3 ... -
并发导致计数不准确问题总结
2012-08-26 15:17 1249并发问题多多!!!! 实际已经395个参与者了,页 ... -
java多线程学习
2012-02-07 16:31 1011CyclicBarrier 在java多线程中,很多时候需要 ...
相关推荐
在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面,还没法根本解决大型网站面临的高负载...
高并发场景下的缓存+数据库双写不一致问题分析与解决方案设计。 在高并发场景下,缓存和数据库的双写不一致问题是一个常见的问题。这种问题的出现是因为在高并发场景下,缓存和数据库的写操作可能会出现不一致的...
总的来说,高并发业务场景下的秒杀解决方案通过Redis的队列技术和原子操作,能够有效地防止超卖问题,同时通过优化策略提高系统的稳定性和效率。在设计类似系统时,还需要考虑其他因素,如系统的扩展性、容错性和...
在IT行业中,尤其是在Java编程领域,开发者经常遇到各种各样的问题和错误。"100例常见错误及解决方案....在实际工作中遇到问题时,可以参考这些案例,迅速找到对应的解决方案,从而减少开发时间,提高项目交付的效率。
以下是对这些问题的详细讨论及其解决方案: 1. CPU过高: - 通过`vmstat`实时监控CPU使用情况,如果AP CPU超过60%的指标,需进行分析。 - 区分use CPU和sys CPU,如果是use CPU过高,通常意味着应用程序消耗过多...
首先,针对延迟任务处理问题,解决方案大致可以分为三类: 1. 基于编程语言的解决方案:这种方案通常使用编程语言中提供的定时器、延时队列等组件。例如,Java中的Timer和DelayQueue,可以实现简单的延迟任务。但...
在解压后的文件中,每个JavaScript文件可能对应LeetCode的一个特定问题,通过阅读和学习这些解决方案,你可以加深对上述知识点的理解,提升编程能力和问题解决技巧。同时,不断实践和优化代码,有助于在实际工作中更...
常见的接口适配器包括基于API的适配器、数据库适配器和消息队列适配器,它们各自对应不同的集成需求。 5. 流程补偿机制的实现——保证交易的一致性 为了确保交易的原子性和一致性,流程补偿机制通过回滚不完整或...
它旨在解决传统数据库环境中常见的性能问题,尤其是在处理高并发、随机I/O以及大数据量时遇到的挑战。在传统的数据库架构中,磁盘和RAID类型、缓存以及分层存储策略可能无法充分应对日益增长的数据和随机性,导致...
本案例实战主要探讨如何解决在高并发场景下,采用多级缓存架构实现数据一致性的问题。在这个主题中,我们将深入理解多级缓存的概念、作用以及一致性策略。 首先,我们来解释一下什么是多级缓存。多级缓存是指在应用...
常见的分布式事务解决方案包括: 1. 两阶段提交(2PC):协调者和参与者两阶段交互,决定是否提交事务。但在网络延迟或协调者故障的情况下可能导致阻塞。 2. 三阶段提交(3PC):2PC的改进版,增加了预提交阶段,...
在IT行业中,性能测试是确保系统在高压力环境下能够正常运行的关键环节,而JMeter因其易用性、灵活性和跨平台特性,成为了许多企业和开发者首选的并发测试解决方案。 JMeter的安装过程首先要求安装Java Development...
#### 常见潜在解决方案分析 1. **数据库搜索法** - **具体方法**:将标题数据存放在数据库中,通过`LIKE`语句进行模糊匹配。 - **优点**:实现简单,易于理解和部署。 - **缺点**:不支持分词;面对高并发时...
五、常见报错与解决方案 1. “找不到或无法加载主类”:检查环境变量是否正确设置,尤其是CLASSPATH。 2. “404错误”:可能是应用没有正确部署,确认应用目录结构是否符合规定,或在server.xml中添加正确的Context...
3. Saga模式:针对长事务的一种解决方案,通过将一个长事务分解为一系列独立的子事务,每个子事务都对应一个补偿操作。如果某个子事务失败,可以回滚前面成功的子事务,保证事务的最终一致性。 4. XA两阶段提交:...
"SDE:各种SDE问题和解决方案的解决方案"这个资源显然旨在为遇到问题的开发人员提供帮助,主要关注C++相关的问题。下面我们将深入探讨C++中可能出现的一些常见问题以及相应的解决方案。 1. **内存管理**: C++中,...
### Redis缓存的三大问题及其解决方案 ...以上介绍了Redis缓存中常见的两种问题——缓存穿透和缓存击穿,以及针对这些问题的解决方案。在实际应用中,应根据具体的业务场景选择合适的策略,以提高系统的稳定性和性能。
《C#软件解决方案》源代码提供了丰富的学习资源,适合初学者深入理解C#编程语言。这个教程通过一系列章节,逐步引导读者掌握C#的核心概念和技术。每个章节对应一个压缩子文件,分别是chap10至chap12以及chap02到chap...
然而,在实际应用中,Oracle数据库可能会遇到一系列问题,影响其正常运行和效率。 1. **表空间数据删除问题**:Oracle数据库的表空间是数据存储的基本单位,删除表空间时需要遵循特定的顺序。如果直接删除数据文件...
本文将详细介绍四种常见的Java分布式session存储解决方案:Session Sticky、Session Replication、Session 数据集中存储和Cookie Based。 1. Session Sticky Session Sticky 方案是指将客户端的每次请求都转发至同...