事务

什么导致spring事务失效

大兔子大兔子 提交于 2020-03-07 23:58:58
今天有个朋友问我一个事务不起作用的问题,如果对事务代理不了解的话,这个问题需要引起大家注意。 先看配置文件: <!-- 配置事务拦截器--> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <!-- 事务拦截器bean需要依赖注入一个事务管理器 --> <property name="transactionManager" ref="myTransactionManager"/> <property name="transactionAttributes"> <!-- 下面定义事务传播属性--> <props> <!--del开头的方法都被事物管理--> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="add*">PROPAGATION_REQUIRED</prop> <prop key="set*">PROPAGATION_REQUIRED</prop> <prop key="del*">PROPAGATION_REQUIRED</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly<

高性能MySQL之锁详解

╄→尐↘猪︶ㄣ 提交于 2020-03-07 23:03:02
一、背景 MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。数据库锁的设计的初衷是处理并发问题。我们知道多用户共享资源的时候,就有可能会出现并发访问的时候,数据库就需要合理的控制资源的访问规则,因此,锁就应运而生了,它主要用来实现这些访问规则的重要数据结构。 二、全局锁 顾名思义,全局锁就是对整个数据库实例加锁,可以通过命令 Flush tables with read lock (FTWRL)对整个数据库实例子加锁。让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。 全局锁有一个经典的使用场景就是做全库逻辑备份,也就是说吧整个数据库的每个表都用select 出来存成文本。以前有一种做法是通过FTWRL确保不会有其他线程对数据库做更新,然后对整个库做备份。注意,在备份过程中整个库完全处于只读状态。 你此时是不是觉得很危险? 如果你在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆; 如果你在从库上备份,那么备份期间从库不能执行主库同步过来的binlog,会导致主从延迟。 看上去确实很危险,但是我们细想一下,备份为什么要加锁呢?如果我们不加锁又会出现什么问题呢? 假设你现在要维护京东的购买系统,关注的是用户账户余额表和用户商品表。

MySQL——存储引擎

眉间皱痕 提交于 2020-03-07 14:04:22
MySQL体系结构如下: 下面介绍一下MySQL的存储引擎: MyISAM: MyISAM是MySQL5.5之前版本的默认存储引擎,在之后的版本中,系统表和临时表会使用到这个存储引擎; 由MYD和MYI组成(数据文件和索引文件),是MyISAM特有的,frm文件用来记录表结构,所用存储引擎都有这个文件; 表级锁,并发性不好; 不支持事务; 支持数据压缩; InnoDB: MySQL是MySQL5.5之后版本的默认存储引擎, 支持事务; 行级锁; 建议使用独立表空间: Redo log(已经提交的事务日志) 和Undo log(未提交的事务日志); 来源: https://www.cnblogs.com/gaoquanquan/p/12433681.html

MongoDB4.0事务实现解析

喜你入骨 提交于 2020-03-07 11:01:31
MongoDB 4.0 引入的事务功能,支持多文档ACID特性,例如使用 mongo shell 进行事务操作 > s = db.getMongo().startSession() session { "id" : UUID("3bf55e90-5e88-44aa-a59e-a30f777f1d89") } > s.startTransaction() > session.getDatabase("mytest").coll01.insert({x: 1, y: 1}) WriteResult({ "nInserted" : 1 }) > session.getDatabase("mytest").coll02.insert({x: 1, y: 1}) WriteResult({ "nInserted" : 1 }) > s.commitTransaction() (或者 s.abortTransaction()回滚事务) 支持 MongoDB 4.0 的其他语言 Driver 也封装了事务相关接口,用户需要创建一个 Session ,然后在 Session 上开启事务,提交事务。例如java版本 try (ClientSession clientSession = client.startSession()) { clientSession.startTransaction();

IT忍者神龟之事务ACID理解

↘锁芯ラ 提交于 2020-03-07 05:16:19
事务概念 概念:事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。 本人WX:kotlinvip 事务的基本要素(ACID) 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。 2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。 3、隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。 4、持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚 场景举例: 银行转账业务图例解释ACID 原子性 根据业务需求怎么才能满足事务的ACID 请往下看 针对同一个事务流程这个过程包含以下流程: 1:张三账户减去 800 2:李四账户加上200 原子性表示 ,这两个步骤一起成功,或者一起失败,不能只发生其中一个动作这样才能满足原子性。 一致性 操作前张三:1000

MySQL 存储引擎

非 Y 不嫁゛ 提交于 2020-03-05 22:35:28
存储引擎 DBMS使用存储引擎进行数据的创建、查询、更新、删除操作。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。 MySQL提供了多种存储引擎,最常见的有3种。 1、MyISAM MySQL5.5之前的默认的存储引擎, 每个MyISAM在磁盘上存储成三个文件,文件名和表名相同,扩展名分别是 (1)frm文件:存储表的定义 (2)MYD文件:存储表中的数据(记录) (3)MYI文件:存储索引。 索引保存的是数据文件的指针 特点 访问速度快(优) 支持全文索引(优)。但基本不使用MySQL的全文索引,全文索引一般都是使用第三方的ElasticSearch,Solr等更加成熟的解决方案。 不支持事务、外键(缺) 默认的锁粒度为表级锁,所以并发度很差(缺),但加锁快,锁冲突较少,不容易发生死锁(优); 对数据的查询缓存只缓存索引,不缓存数据(记录),而且使用的是操作系统本身的缓存。 自动增长列可以是组合主键中的任何一列。设置自动增长列:创建表时,在字段后加auto_increment,默认初始值是1 适用场景 不需要事务 不使用外键 操作以select、insert为主 MyISAM支持三种不同的存储格式 (1)静态表(fixed) 表中不能包含变长字段(比如VARCHAR, BLOB, TEXT),每个记录都是固定的长度

分布式事物2 基于rocketmq

梦想的初衷 提交于 2020-03-05 20:05:44
分布式事物2 基于rocketmq 从rocketmq的官网可以看到,它又以下几种消息类型: 1)发送同步消息 这种可靠性同步地发送方式使用的比较广泛,比如:重要的消息通知,短信通知 2)发送异步消息 异步消息通常用在对响应时间敏感的业务场景,即发送端不能容忍长时间地等待Broker的响应。 3)单向发送消息 这种方式主要用在不特别关心发送结果的场景,例如日志发送。 消息消费: 1)负载均衡模式 消费者采用负载均衡方式消费消息,多个消费者共同消费队列消息,每个消费者处理的消息不同 2)广播模式 消费者采用广播的方式消费消息,每个消费者消费的消息都是相同的 4)顺序消息 消息有序指的是可以按照消息的发送顺序来消费(FIFO)。RocketMQ可以严格的保证消息有序,可以分为分区有序或者全局有序。 顺序消费的原理解析,在默认的情况下消息发送会采取Round Robin轮询方式把消息发送到不同的queue(分区队列);而消费消息的时候从多个queue上拉取消息,这种情况发送和消费是不能保证顺序。但是如果控制发送的顺序消息只依次发送到同一个queue中,消费的时候只从这个queue上依次拉取,则就保证了顺序。当发送和消费参与的queue只有一个,则是全局有序;如果多个queue参与,则为分区有序,即相对每个queue,消息都是有序的。 5)延时 比如电商里

linux--mysql(主从复制gid)

痴心易碎 提交于 2020-03-05 13:52:44
gid主从辅助复制(在position的基础上) GTID复制不像传统的复制方式(异步复制、半同步复制)需要找到binlog(MASTER_LOG_FILE)和POS点(MASTER_LOG_POS) 只需要知道master的IP、端口、账号、密码即可,因为复制是自动的,MySQL会通过内部机制GTID自动找点同步 和基于position的主从复制的不同之处在于:它是以一整个事件为单位进行复制的 server - id:服务器身份id,在初始化MySQL时,会自动生成一个server - id并写到数据目录的auto . cnf文件中,官方不建议修改,并且server - id跟GTID有密切关系, 并且对于任意一个数据库节点,server - id是唯一的 GTID:全局事务标识符,使用这个功能时,内次事务提交都会在binlog里生成一个唯一的标识符,它由UUID和事务ID组成,首次提交的事务为1,第二次为2,第三次为3,以此类推 开启GTID,无需找到binlog和POS点,直接change master to master_auto_postion=1即可,它会自动寻找同步 在master上一个事务提交,并写入binlog里。 binlog日志发送到slave,slave接收并写入中继日志里,slave读取到这个GTID,并设置gtid_next的值。例如 set @

Spring面试笔记

时光总嘲笑我的痴心妄想 提交于 2020-03-05 12:04:54
1. Spring工作机制及为什么要用? Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。Spring既是一个AOP框架,也是一IOC容器。 SpringFramework的组成:Spring AOP,Spring DAO,Spring ORM,Spring Web,Spring Context, Spring Web MVC。 Spring的核心就是IOC和AOP,所以Spring的工作机制简单的理解也就是IOC和AOP的工作机制。 借助于Spring AOP,Spring IoC能够很方便的使用到非常健壮、灵活的企业级服务,通过使用IoC能够降低组件之间的耦合度,最终,能够提高类的重用性,利于测试,而且更利于整个产品或系统集成和配置。 2. 说说AOP和IOC的概念以及在spring中是如何应用的? AOP,Aspect Oriented Program,面向(方面)切面的编程; IOC,Invert Of Control,控制反转。 简单说一下,IOC就是其实就是依赖注入,即用接口编程,在程序中不出现new关键字,而是用接口来命名引用,然后通过某种方式把接口的某个实现类的实例注入到引用里,从而实现接口与具体实现类的松耦合。 由容器控制程序之间的关系(通过XML配置),而非传统实现中的由程序代码直接操控,(在一个Class对象中引用另一个Class对象时