并发控制机制
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。[1]
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。[1] 乐观锁不能解决脏读的问题。
乐观锁应用
1. 使用自增长的整数表示数据版本号。更新时检查版本号是否一致,比如数据库中数据版本为6,更新提交时version=6+1,使用该version值(=7)与数据库version+1(=7)作比较,如果相等,则可以更新,如果不等则有可能其他程序已更新该记录,所以返回错误。
2. 使用时间戳来实现.
注:对于以上两种方式,Hibernate自带实现方式:在使用乐观锁的字段前加annotation: @Version, Hibernate在更新时自动校验该字段。
悲观锁应用
需要使用数据库的锁机制,比如SQL SERVER 的TABLOCKX(排它表锁) 此选项被选中时,SQL Server 将在整个表上置排它锁直至该命令或事务结束。这将防止其他进程读取或修改表中的数据。
SqlServer中使用
Begin Tran
select top 1 @TrainNo=T_NO
from Train_ticket with (UPDLOCK) where S_Flag=0
update Train_ticket
set T_Name=user,
T_Time=getdate(),
S_Flag=1
where T_NO=@TrainNo
commit
我们在查询的时候使用了with (UPDLOCK)选项,在查询记录的时候我们就对记录加上了更新锁,表示我们即将对此记录进行更新. 注意更新锁和共享锁是不冲突的,也就是其他用户还可以查询此表的内容,但是和更新锁和排它锁是冲突的.所以其他的更新用户就会阻塞.
分享到:
相关推荐
Java + Netty 实现的高并发高可用MQTT服务broker,轻松支持10万并发,已用于生产环境 技术体系:(使用 netty 实现通信及协议解析,使用 nutzboot 提供依赖注入及属性配置,使用 redis 实现消息缓存,集群,使用 ...
蚂蚁金服技术专家整理,Java并发体系-高清版思维导图! 包含日常开发以及集群应用并发技术思维导图~
kettle集群(cluster)在多个服务器上并发执行,文档详细移动,通过测试成功
Java架构开发大型互联网-架构师必须掌握的分布式技术pdf+视频
同时,使用lvs/nginx+keepalived做高并发高可用集群,整合tomcat容器,采用辅助软git和Nas技术,分别确保多个数据库之间的数据同步和多个web服务器之间的网页同步,最后,用监控软件监控整体服务器的运行情况。
使用Actor处理高并发。易于测试。服务的插件管理。高性能,可伸缩的Java Tcp服务器架构,1.Avalon基于Akka构建的服务器核心。天生分布式基因便于横向拓展;2.网络部分使用Netty;3.服务器分为单服务器和多节点分布式...
做我们IT这一行,一定要使自己精于某个领域,再不断的去涉猎其他的领域,更重要的是学会找出各个领域的相融点,这跟我们学习书本一样,用‘Java’和‘计算机网络’来举下例子,我们知道Java中的socket编程,对于面向...
Java分布式应用学习笔记06浅谈并发加锁机制分析
Java + Netty 实现的高并发高可用MQTT服务broker,轻松支持10万并发(有群友实现了130万在线)。使用 netty 实现通信及协议解析,使用 nutzboot 提供依赖注入及属性配置,使用 redis 实现消息缓存,集群,使用 kafka ...
手把手教你如何搭建redis集群,以及redis在java当中的使用,不必再用Ehcatch本地缓存,从而实现解决高并发业务场景
Java分布式应用学习笔记05多线程下的并发同步器
述了Web服务器和移动互联网软件对分布式开发和集群的需求,并从Java并发编程引入分布式开发,介绍Java分布式开发和集群技术的原理。
由于MySQL Proxy官方版本在高并发下存在性能问题,用Qihoo 360公司的Atlas替代MySQL Proxy, Atlas是基于MySQL Proxy 0.8.2版本上修改了大量BUG,重写了网络模型、线程模型, 大量实践应用下每天承载的读写请求数达几...
【数据库缓存】【数据库缓存】【服务器的集群化,以及负载均衡】
本人十余年JAVA从业经验,精通JAVA高可用、分布式、高并发系统架构设计。有志于做JAVA职业规划、技术提升的可与我联系,交个朋友~ 本人十余年JAVA从业经验,精通JAVA高可用、分布式、高并发系统架构设计。有志于做...
本人十余年JAVA从业经验,精通JAVA高可用、分布式、高并发系统架构设计。有志于做JAVA职业规划、技术提升的可与我联系,交个朋友~ 本人十余年JAVA从业经验,精通JAVA高可用、分布式、高并发系统架构设计。有志于做...
在高并发、大数据的背景下,单机版的Redis已无法满足我们的需求,这时候我们就需要Redis集群。本文将带你详细了解如何使用Java来操作Redis分布式集群,提高数据处理的能力。 Redis集群 集群定义:Redis集群是一种将...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
高并发秒杀使用rabbitmq异步发送秒杀邮件使用redisson分布式锁来控制高并发使用redis缓存来降低数据库的访问压力,之后会进一步完善和构建集群使用shiro来控制登录认证,项目较简单权限控制未添加数据库采用druid