NATAPP内网穿透
NATAPP内网穿透1.什么是内网穿透内网穿透也可以叫做内网穿透,“NAT穿透”
可以让外网访问你的内网,把自己的内网(主机)当成服务器,提供给外部访问;
2.内网穿透工具网上有很多内网穿透工具,花生壳,NATAPP等,今天来演示一下NATAPP
https://natapp.cn/
2.1 下载客户端
windows 版本的里面只有一个natapp.exe,需要在同级目录下加一个配置文件config.ini
123456789#将本文件放置于natapp同级目录 程序将读取 [default] 段#在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置#命令行参数 -config= 可以指定任意config.ini文件[default]authtoken= #对应一条隧道的authtokenclienttoken= #对应客户端的clienttoken,将会忽略authtoken,若无请留空,log=none #log ...
MyBatis多数据源配置及分布式事务问题
MyBatisPlus配置多数据源开发问题:在开发过程中,可能一个项目需要使用多个数据源的情况,一部分表数据在库A,一部分表数据库在库B,某些时候需要同时调用两个库的数据进行合并处理或查询。
解决方法:配置多数据源的方案有很多,这是其中一种。
一.pom依赖12345<dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>${version}</version><!--版本号--></dependency>
123456789101112131415<!--mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> ...
Spring事务管理
Spring事务什么是事务事务是一个由有限操作集合组成的逻辑单元。事务操作包括两个目的,数据一致和操作隔离。
数据一致指的是事务提交时保证事务内的所有操作都完成或者都失败,并且更改永久生效;
事务回滚保证所有数据恢复到事务开始的执行状态。操作隔离指的是多个事务同时执行之间相互独立,互不影响。
Spring事务管理接口介绍
Spring事务管理接口:
PlatformTransactionManager: (平台)事务管理器
TransactionDefinition: 事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则)
TransactionStatus: 事务运行状态
所谓事务管理,其实就是“按照给定的事务规则来执行提交或者回滚操作”。
PlatformTransactionManager接口介绍
Spring并不直接管理事务,而是提供了多种事务管理器 ,他们将事务管理的职责委托给Hibernate或者JTA等持久化机制所提供的相关平台框架的事务来实现。 Spring事务管理器的接口是: org.springframework.transaction.Platform ...
行锁功过(如何减少对性能的影响)
行锁功过(如何减少对性能的影响)MySQL的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如MyISAM引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表任何时刻只能有一个更新在执行,这就会影响到业务并发度。InnoDB是支持行锁的,这也是MyISAM被InnoDB替代的重要原因之一。
InnoDB的行锁,以及如何通过减少锁冲突来提升业务并发度顾名思义,行锁就是针对数据表中行记录的锁。这很好理解,比如事务 A 更新了一行,而这时候事务 B 也要更新同一行,则必须等事务 A 的操作完成后才能进行更新。
当然,数据库还有一些没那么一目了然的概念和设计,这些概念如果理解和使用不当,容易导致程序出现非预期行为,比如两阶段锁。
从两阶段锁说起在下面的操作序列中,事务 B 的 update 语句执行时会是什么现象呢?假设字段 id 是表 t 的主键。
这个问题的结论取决于事务A在执行完两条update语句后,持有哪些锁,以及在什么时候释放。
实际上:事务B的update语句会被阻塞,直到事务A执行完commit之后,事务B才能继续执行。
知 ...
全局锁和表锁
全局锁和表锁数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。
根据加锁是范围,MySQL里面的锁大致可以分为全局锁、表级锁和行级锁三类。
全局锁全局锁就是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,命令是
Flush tables with read lock(FTWRL)。(unlock tables 可以接触)。当需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(数据库的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。
全局锁的经典使用场景是,做全库逻辑备份。也就是把这个库每个表都select出来存成文本。
以前的做法:通过FTWRL确保不会有其他线程对数据库做更新,然后对整个库做备份。
注意:在备份过程中整个库处于只读状态。
如果你在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆;
如果在从库上备份,那么备份期间从库都不能执行主库同步过来的binlog,会导致主从延迟。( ...
深入浅出索引-下
深入浅出索引(下)在下面这个表 T 中,如果我执行 select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行?
下面是这个表的初始化语句。
1234567mysql> create table T (ID int primary key,k int NOT NULL DEFAULT 0, s varchar(16) NOT NULL DEFAULT '',index k(k))engine=InnoDB;insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg');
这条SQL查询语句的执行流程:
在 k 索引树上找到 k=3 的记录,取得 ID = 300;
再到 ID 索引树查到 ID=300 对应的 R3;
在 k 索引树取下一个值 ...
深入浅出索引(上)
深入浅出索引(上)索引的出线骑士就是为了提供数据查询的效率,就像书的目录一样。一本几千页的书。如果你想快速的找到其中的某个知识点,再不借助目录的情况下,需要很长的时间。对于,数据库的表而言,索引骑士就是它的”目录”。
索引的常见模型索引的出线是为了提高查询效率,但是实现索引的方式却又很多种,这里也就引入了索引模型的概率。可以用于提高读写效率的数据结构很多,这里先介绍三种常见的,比较简单的数据结构,它们分别是哈希表、有序数组和搜索树。
哈希表是一种已键 - 值(key-value)存储数据的结构,我们只要输入待查找的键即 key,就可以找到其对应的值即 Value。哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。
不可避免的,多个key值经过哈希函数的换算,会出现多一个值的情况。处理这种情况的方法是,拉出一个链表。
1Key value都放在链表里面,根据key算出的哈希值找到相应链表位置,存入数据里。当需要用key查value时,先算出哈希值,找到指定链表位置,再用key去遍历后面的链表,因为链表中同时包含key ...
事务隔离
事务隔离:为什么改了任看不见最经典的一个列子转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱。
转账过程具体到程序里会有一系列的操作,比如查询余额、做加减法、更新余额等,这些操作必须保证是一体的,不然等程序查完之后,还没做减法之前,你这 100 块钱,完全可以借着这个时间差再查一次,然后再给另外一个朋友转账,如果银行这么整,不就乱了么?这时就要用到“事务”这个概念了。
注意:由此可见,事务和锁是紧密相关的,事务必须借助锁才能实现,事务的底层实现,无非就是实现事务的四大特性,redo日志实现持久性,undo日志实现原子性,通过加锁实现隔离性和一致性。。
简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持在引擎层实现的。MySQL是一个支持多引擎的系统,但不是所有的引擎都支持事务,比如MySQL远程的MyISAM引擎就不支持事务这也是 MyISAM 被 InnoDB 取代的重要原因之一。
事务的隔离性和隔离级别ACID 即原子性、一致性、隔离性、持久性。
Atomicity(原子性):一个事务(transaction)中的 ...
一条UPATE语句执行过程(日志系统)
一条SQL更新语句是如何执行的(日志系统)?一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎
一条更新语句的执行流程又是怎样的呢?
你执行语句前要先连接数据库,这是连接器的工作。 在一个表上有更新的时候,跟这个表有关的查询缓存会失效,所以这条语句就会把表 T 上所有缓存结果都清空。
分析器会通过词法和语法解析知道这是一条更新语句。优化器决定要使用 ID 这个索引。
然后,执行器负责具体执行,找到这一行,然后更新。
从一个表的一句更新语句说起:
1mysql> create table T(ID int primary key, c int);
如果要将 ID=2 这一行的值加 1
1mysql> update T set c=c+1 where ID=2;
查询语句的那一套流程,更新语句也是同样会走一遍。
执行语句前,首先会连接数据库,这是连接器的工作。
123456789连接器功能: 1.建立连接,获取权限,管理和维系连接 2.长连接:连接建立后,持续有请求发出,使用同一连接 3.短连接:连接 ...
一条SQL是如何执行的
一条SQL是如何执行的?1select * from T where ID = 1
在之前查询语句的时候,看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程。
深入了解SQL的执行过程,我们可以对MySQl有更深的理解,这样我们遇到一些异常或者问题的时候可以快速捕捉解决。
MySQL的基本执行架构示意图 如下
大体来说,MySQL可以分为Server层和存储引擎层 两部分。
1️⃣Server层包括连接器、查询缓存、分析器、执行器等,涵盖了MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
2️⃣存储引擎负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。现在最常用的就是InnoDB,MySQL5.5.5版本开始成为了默认的存储引擎。
InnoDB支持事务,而MyISAM不支持事务
InnoDB支持行级锁,而MyISAM支持表级锁
InnoDB支持MVCC, 而MyISAM不支持
InnoDB支 ...