MySQL InnoDB锁机制及锁超时案例分析 当表有多个索引的时候,不同的事务可以用不同的索引来锁定不同的行。另外,不论是使用主键索引,唯一索引或者普通索引,InnoDB都会使用行锁来对数据加锁。但即便在条件中使用了索引字段,具体是否使用索引,使用哪个索引,是由MySQL执行计划来判断的。
MySQL查询时区分大小写 更新表字段编码格式alter table `tableName`to character set utf8mb4 COLLATE utf8mb4_bin;COLLATEutf8mb4_bin 的意义为:*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的,如COLLATEutf8mb4_bin*_cs: case sensitive collation,区分大小写,如 COLLATEutf8mb4_cs*_ci: case...
关于redis做秒杀库存扣减的生产实践及思考 近期组员接手了一个领券的业务,涉及到了对券批次库存的扣减操作,在多次尝试优化后压测起来仍有一些性能问题,由于接近deadline,于是自己也尝试上手优化了一下。使我对日常在论坛看到的redis秒杀库存的实现有了进一步的认知。...
记一次FastJson使用不当导致频繁Full GC排查 具体原因为:https://www.cnblogs.com/liqipeng/p/11665889.html与这篇文章的情况类似,可以直接按这篇文章的解决方案进行调整,此处只记录下排查过程。 近期,测试压测某个查询接口时,发现压测的开始一段时间TPS比较稳定,在压测进行多了几次后,TPS开始出现巨大波动。 进服务器利用TOP命令查看机器基本情况,发现业务层CPU的占用已经达到93%,但数据库层的CPU占用却仅在25%,说明数据库压力并不大,而这个业务只是单纯的查询用户是否处于黑名单状态...
代码中使用redis锁和Spring事务时需注意的点 前几天,有同事过来请教,为啥明明加了redis锁,也有在代码里做了插入的幂等校验,同一个入参并发时为啥还是插入了两条。 首先,这种重复性的数据可以在数据库用唯一索引做。但这不是我们此次讨论的重点。我们需要讨论的是,为啥redis锁不起作用了。 review了代码,发现他的redis锁用了注解AOP进行实现。并且在方法上也用了@Transactional事务注解。所以这是个对AOP的执行顺序和事务的理解不到位的问题。(代码中注册时会判断手机号是否已注册) 我们知道,在事务未...
@Transaction(rollbackfor=Exception.class)的原因 rollbackfor默认是RuntimeException,声明为Exception.class可以扩大异常回滚范围。
记一次利用TOP命令排查压测问题经过 梦开始的地方 近期,负责的接口开始上压测环境,第一次接触压测,对能压到多少TPS并没有多少概念。然而结果还是十分出乎意料,“单接口TPS100+左右,并发50,100,200的结果基本稳定,接口请求有点慢,而且CPU占用率很异常,四核CPU都跑满了,不是很合理,排查下什么原因。”测试如是说。 询问了下组长上一版的时候其他接口的压测结果,组长回复不至于这么慢。于是开始排查自己代码的问题。排查代码问题 Review代码。首先想,是不是自己的代码有问题,将代码发给有压测经验...
MySQL事务问题排查语句 查询当前事务隔离级别select @@tx_isolation;查询当前执行中事务select * from information_schema.innodb_trx;*************************** 1. row *************************** trx_id: 113963 ...
关于交易类业务的一些注意点 交易系统往往要和多个系统进行对接,目前对接过程很难做到事务的控制操作(我成功了,我回调了你,你执行失败了)。所以要做到失败的补偿:重试、失败通知、失败记录、订单号记录、完整的日志链跟踪。 其次,是与银行对接的问题:金额到账延迟,失败重试超时,重复请求查询结果超次数,同一业务下多个接口调用无法回滚。像金额到账延迟还不算太大的问题,但像失败重试超时这些,就很容易导致出现大的问题。 失败...
@Value中冒号的作用 先说明冒号的作用 :可以设置默认值@Value中可以使用@Value("${hello:defaultValue}")private String hello;若找不到属性值hello,那么就会默认赋值 defaultValue
Excel导入导出——学习笔记 利用Poi进行Excel导入导出,在SpringBoot框架下进行测试,并使用了Bootstrap-fileinput作为前端上传组件作为参考,下载采用原生ajax下载形式,因为一直忘记前端下载怎么写还有后端怎么设置Request-Header,所以提供一个整个前后端的思路,以后方便进行查阅!
RocketMQ学习笔记——Hello World 为什么要使用RocketMQ这个问题也可以是为什么要使用消息队列,一个东西的诞生,必然是业务的需要。消息队列的主要作用有:削峰填谷(主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题) 系统解耦(解决不同重要程度、不同能力级别系统之间依赖导致一死全死) 提升性能(当存在一对多调用时,可以发一条消息给消息系统,让消息系统通知相关系统)比较容易理解的作用有秒杀系统,当大...
SpringBoot——JPA学习笔记 前言使用过Hibernate的同学应该知道,Hibernate的作用就是面向对象写SQL,Hibernate要求我们尽量关注与对象之间的关系,封装底层的数据库,用对象之间的映射关系去建立表之间的联系。而JPA与Hibernate十分相似,也是可以利用对象来直接操作数据库。它只需要极其简单的几个类就可以完成对一个对象的CURD操作。具体如何简单,且看接下来的步骤。引入JPA依赖...
如何通过Maven的Tomcat插件运行Web工程 去tomcat官网http://tomcat.apache.org/,左侧栏Apache Tomcat下的Maven Plugin,点进去选择最新版本Version 2.2通过介绍可知,使用tomcat的maven插件有两种配置方式:第一种:在pom.xml文件的<build></build>中加入如下配置: 1 <pluginManagement> 2 ...
SpringMVC 跨域访问 需Spring版本为4.2以上在Controller上注解 @CrossOrigin(origins="*")或在web.xml中配置<servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servl...
Freemarker获取RequestContextPath 在开发中,我们需要获取到requestContextPath来使得导入的css或js不因请求路径变化而导致404从而致使导入失败。在配置SpringMVC FreeMarker视图解析器(FreeMarkerViewResolver)时,进行如下配置 <!-- FreeMarker视图渲染器配置 --> <bean class="org.springframewo...
Mysql查询今天,昨天,最近一周语句 今天: select * from `article` where to_days(`add_time`) = to_days(now()); 昨天: select * from `article` where to_days(now()) – to_days(`add_time`) 查询近7天的信息记录: select * from `article` wher
maven自动部署到远程tomcat教程 使用maven的自动部署功能可以很方便的将maven工程自动部署到远程tomcat服务器,节省了大量时间。 本文章适用于tomcat的7.x ,8.x, 9.x版本。 1,首先,配置tomcat的manager 编辑远程tomcat服务器下的conf/tomcat-users.xml,在末尾增加(其实只要拉到文件末尾,去掉注释改一下就可以了) role rolename="m