mysql幻读问题 问题:什么样的情况叫做幻读? Mysql 可重复读隔离级别下,到底能不能阻止幻读? 什么是当前读,什么是快照读?幻读的定义:事务A 按照一定条件进行数据读取, 期间事务B 插入了相同搜索条件的新数据,事务A再次按照原先条件进行读取时,发现了事务B 新插入的数据 称为幻读如果事务A 按一定条件搜索, 期间事务B 删除了符合条件的某一条数据,导致事务A 再次读取时数据少了一条。这种情况归为 不可重复读准备工作:Mysql 隔离级别为 可重复读;CREATE TABLE `a.
git 回退版本操作 1、当前分支下git log --pretty=oneline查看完成后,需要回退到那个分支就复制版本号,如果只是回退到上一次操作git reset --hard HEAD^或者 git reset --hard 60037ab9451099f1e4b8b77ca5156403024d20d02、本地分支已经回滚到 5efd5a8aa5d5b22a73a1569087faa57d5484adf9框红的是另外一个分支的内容,所以回滚到 5efd5a8aa5d5b22a73a1.
mysql Innodb在RR级别如何避免幻读 什么是幻读 事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样。 mysql如何实现避免幻读 在快照读读情况下,mysql通过mvcc来避免幻读。 在当前读读情况下,mysql通过next-key来避免幻读 什么是mvcc mvcc全称是multi v..
java @ConfigurationProperties(springboot)和@Value(java)的区别 在编写项目代码时,我们要求更灵活的配置,更好的模块化整合。在 Spring Boot 项目中,为满足以上要求,我们将大量的参数配置在 application.properties 或 application.yml 文件中,通过@ConfigurationProperties注解,我们可以方便的获取这些参数值...
java DAO层注解@param和控制层@RequestParam注解 @Param:用来在DAO层中声明参数,如:List<News> selectByUserIdAndOffset(@Param("userId") int userId, @Param("offset") int offset, @Param("limit") int limit);
微服务阿里分布式事务解决方案seata(^_^) Seata 是什么?Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
Spring注解中@Configuration和@Configurable @Configuration写成了@Configurable,这两个长得很像,所以顺便探究下,有什么区别。@Configuration该注解是可以用来替代XML文件。以前我们配置bean时,都是写在applicationContext.xml文件中的。有了这个注解后,我们就可以编写一个类在其上面加上该注解。即配置类。在配置类中可以在方法上加@Bean注解定义其中的Bean@Configurable现在假设,我们想在非Spring管理的类中使用依赖注入;比如:手动new出来..
NIO中的零拷贝技术 现在好多rpc框架调用都是使用netty作为网路通信框架的底层原理netty使用Java NIO的同步非阻塞,Java NIO的技术核心:零拷贝技术Kafka,dubbo,MQ都是采用Java NIO零拷贝技术提升文件读取性能。2. JavaNIO中的零拷贝定义从WIKI的定义中,我们看到“零拷贝”是指计算机操作的过程中,CPU不需要为数据在内存之间的拷贝消耗资源。而它通常是指计算机在网络上发送文件时,不需要将文件内容拷贝到用户空间(User Space)而直接在内核空间(Kern.
二叉树、平衡二叉树、B树,B+树 索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这个数据,直接对全数据检索也很快,没有必要费力气建索引再去查找。索引在 MySQL 数据库中分三类:B+ 树索引 Hash 索引 全文索引我们今天要介绍的是工作开发中最常接触到的 InnoDB 存储引擎中的 B+ 树索引。要介绍 B+ 树索引,就不得不提二叉查找树,平衡二叉树和 B 树这三种数据结
Spring中的Aware(^_^) 简介Spring框架中提供了许多实现了Aware接口的类,这些类主要是为了辅助Spring访问容器中的数据,比如BeanNameAware,这个类能够在Spring容器加载的过程中将Bean的名字(id)赋值给变量。常用的AwareBeanNameAware:能够获取bean的名称,即是id BeanFactoryAware:获取BeanFactory实例 ApplicationContextAware:获取ApplicationContext MessageSourceAwar..
Java中object类finalize()方法 java提供了一个finalize方法,可以帮助我们进行资源释放,类似于C++中的析构函数。但是目前普遍的认识是不要使用,为什么呢?就是因为对java虚拟机的垃圾回收有影响。这篇文章对其进行一个说明。一、为什么有影响我们都知道一个对象如果没有了任何引用,java虚拟机就认为这个对象没什么用了,就会对其进行垃圾回收,但是如果这个对象包含了finalize函数,性质就不一样了。怎么不一样了呢?java虚拟机在进行垃圾回收的时候,一看到这个对象类含有finalize函数,就把这个函数交给Finaliz
JDK8新特性 1.1 函数式编程 1.2 Lambda表达式 1.2.1 语法 1.2.2 函数接口 1.2.3 类型检查、类型推断 1.2.4 局部变量限制 1.2.5 使用示例 2.1 流介绍 2.2 使用流 2.3 并行流 4.1 介绍 4.2 使用说明 4.3 注意事项 6.1 LocalDate/LocalTime/LocalDateTime 6.2 TemporalAdjusters 6.3 DateTimeFormatter下面对几个常用的特性做下重点说明。一
mysql主从复制(读写分离)和mysql和redis数据不一致解决方案(^_^^_^^_^) mysql引入redis后,暂不考虑主从复制和读写分离,我们的策略是:一、读的时候更新缓存呢(推荐)分析如下:我们在操作数据库写的时候,删除缓存,更新数据库,然后在读的时候,更新缓存(这个操作如果不是强一致性的情况下,我们这4步操作都不需要加锁,可以通过设置key的过期时间来解决数据的最终一致性)二、写的时候更新缓存呢(不推荐)分析如下:我们在操作数据库写的时候,去更新缓存,更新数据库,读的时候直接读缓存即可(这样在高并发的场景下,需要保证这二步操作的原子性,影响性能,不推荐)在读.
在MySQL中重复的插入数据不抛异常(性能待验证) 最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下:这里为了方便演示,我新建了一个user测试表,主要有id,username,sex,address这4个字段,其中主键为id(自增),同时对username字段设置了唯一索引:01 insert ignore into(这个可以使用下)即插入数据时,如果数据存在,则忽略此次插入,前提条件是插入的数
MySQL中,当update修改数据与原数据相同时会再次执行吗? 一、背景本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗?二、测试环境MySQL5.7.25Centos 7.4三、binlog_format为ROW1、参数image2、测试步骤session1imagesession2imagesession1image3、总结在binlog_format=row和binlog_row_image=FULL时,由于MyS
Git撤销&回滚操作(git reset 和 get revert)(^_^^_^) git的工作流工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的。暂存区:已经 git add xxx 进去,且未 git commit xxx 的。本地分支:已经git commit -m xxx 提交到本地分支的。这里写图片描述代码回滚在上传代码到远程仓库的时候,不免会出现问题,任何过程都有可能要回滚代码:1、在工作区的代码git checkout -- a.txt # 丢弃某个文件,..
git版本回退的最佳操作 使用git开发的过程中,存在误提交的时候怎么办呢?不用慌张,强大的git提供了两种版本回退的方式,可以让你恢复提交之前的内容:方式一:reset(不推荐)通过reset的方式,把head指针指向之前的某次提交,reset之后,后面的版本就找不到了操作步骤如下:1、在gitlab上找到要恢复的版本号,如:139dcfaa558e3276b30b6b2e5cbbb9c00bbdca962、在客户端执行如下命令(执行前,先将本地代码切换到对应分支):gitreset--har...
spring事务提交后一系列相关异步操作(例如MQ或者线程池)(^_^^_^) 1、场景在常见的操作中,我们需要在数据库操作完成(事务提交完成)后进行一系列相关操作,如redis更新操作、发送消息到其他系统等操作。2、方案可以使用spring自带的事务处理机制完成。继承 TransactionSynchronizationAdapter 类执行相关操作。先看一下TransactionSynchronizationAdapter 的源码方法/* * Copyright 2002-2012 the original author or authors. * * Li
@PostConstruct注解 1、从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。写法有如下两种方式:@PostConstruct注解的方法将会在依赖注入完成后被自动调用。@PostConstructpublic void someMethod(){}或者public @PostConstruct void someMethod(){}被@PostConstruct修饰的