摘要:
简介 在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。同时锁机制也为实现MySQL的各个隔离级别提供了保证。锁冲突也是影响数据库并发访问性能的一个重要因素。所以锁对数据库而言显得尤其重要 阅读全文
摘要:
当用户在服务器1认证后,服务器1将session存入reis,这时服务器1突然挂了,用户还可以访问服务器2且不用登录,因为服务器2从redis中获取session 配置方式 # core模块中添加依赖 <dependency> <groupId>org.springframework.boot</g 阅读全文
摘要:
案例1:当用户在第2台电脑登录时,第1台电脑抛出错误信息,并下线 在security配置类中添加如下 .and() .sessionManagement()// session管理 // 设置最大session数量为1 .maximumSessions(1) 测试1:用edge浏览器模拟第1台电脑, 阅读全文
摘要:
mysql 基础 1 2 3 4 5 简介 基础使用 select语句、去重 mysql运算符:算术、比较、逻辑、位 排序与分页 连表查询 mysql单行函数:数值、字符串、日期时间、流程控制 mysql聚合函数:AVG、SUM、MIN、MAX、COUNT、GROUPBY、HAVING mysql子 阅读全文
摘要:
在demo05的基础上开发 认证时勾选记住我,认证成功后,会在应用程序中生成remember-me和JSESSIONID 数据库中会生成1条记录 为了演示session的作用,所以在之后的测试中不勾选记住我 在web模块的yml中设置session会话超时时长 server: servlet: se 阅读全文
摘要:
代码案例 @RestController @RequestMapping("/user") public class WebController { @RequestMapping({"/test1"}) public String index() { Object principal = Secu 阅读全文
摘要:
起步 简介 手机号登录是不需要密码的,通过短信验证码实现免密登录功能 1. 向手机发送手机验证码,使用第三方短信平台 SDK 发送,如: 阿里云短信服务(阿里大于) 2. 登录表单输入短信验证码 3. 使用自定义过滤器 MobileValidateFilter 4. 当验证码校验通过后,进入自定义手 阅读全文
摘要:
案例一:github/03/security/demo04 在demo03的基础上继续开发 # core模块将ValidateCodeException提取到exception文件夹 # core模块导入依赖 <dependency> <groupId>org.springframework.boo 阅读全文
摘要:
修改CustomAuthenticationFailureHandler类和CustomAuthenticationSuccessHandler # 将实现接口AuthenticationSuccessHandler修改为SavedRequestAwareAuthenticationSuccessH 阅读全文
摘要:
在demo01的基础上继续开发 web模块编写CustomUserDetailsService @Component("customUserDetailsService") public class CustomUserDetailsService implements UserDetailsSer 阅读全文
摘要:
父工程依赖 <!-- 依赖版本号 --> <properties> <mybatis-plus.version>3.2.0</mybatis-plus.version> <druid.version>1.1.12</druid.version> <oauth2-autoconfigure.versi 阅读全文
摘要:
javase 1 2 3 4 5 基础语法 条件语句 面向对象 Exception Collection 集合框架拓展 抽象类和接口 内部类 集合框架 异常处理和泛型 File文件和目录 字节流 字符流 日期时间 常用类 Enum 序列化与反序列化 加解密:编码算法、哈希算法 加解密:BouncyC 阅读全文
摘要:
创建eureka子模块 pom <dependencies> <dependency> <groupId>com.mengxuegu</groupId> <artifactId>mengxuegu-cloud-oauth2-base</artifactId> <version>${mengxuegu 阅读全文
摘要:
简介 单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录, 也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁 导入表 查看表oauth_client_details的数据 加密后的密码 拥有的 阅读全文
摘要:
前言 参考 充血模型:在实体类中除了属性、getter、setter方法,还有一些业务方法 贫血模型:在实体类中只有属性和getter、setter方法,不能体现实体类在当前系统中的作用 仓库与工厂:将持久层所需的实体对象拆分出来,在持久层的接口方法中我们通常需要传入参数返回返回值等;而这些参数和返 阅读全文
摘要:
风格1 └── demo ├── application | ├── assembler # dto与do转换 | ├── dto # 数据传输对象 | ├── event | | ├── publish # 事件发布 | | └── subscribe # 事件订阅 | | | └── servi 阅读全文
摘要:
实体类 @Data // 生成getter和setter方法 @AllArgsConstructor // 有参构造器 @NoArgsConstructor // 无参构造器 @ToString // toString方法 @Accessors(chain = true) @TableName("u 阅读全文
摘要:
Mini-Transaction redo 日志写入log buffer redo log block的结构图 redo log file相关参数设置 1、innodb_log_group_home_dir :指定 redo log 文件组所在的路径,默认值为 ./ ,表示在数据库的数据目录下。My 阅读全文
摘要:
redo日志的组成 1、重做日志的缓冲(reldolog buffer),保存在内存中,是易失的。 在服务器启动时就向操作系统申请了一大片称之为redo log buffer的连续内存空间,翻译成中文就是redo日志缓冲 区。这片内存空间被划分成若干个 连续的redo log block。一个red 阅读全文
摘要:
简介 事务有4种特性:原子性、一致性、隔离性和持久性。 事务的隔离性由 锁机制 实现。 而事务的原子性、一致性和持久性由事务的 redo 日志和undo 日志来保证。 REDO LOG 称为 重做日志 ,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。 UNDO LOG 称为 回滚日 阅读全文
摘要:
简介 MySQL是一个 客户端/服务器 架构的软件,对于同一个服务器来说,可以有若干个客户端与之连接,每个客户端与服务器连接上之后, 就可以称为一个会话( Session )。每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是某个事务的一部分, 也就是对于服务器来说可能同时处理多 阅读全文
摘要:
登录mysql后使用如下命令,查看存储引擎对事务的支持情况 SHOW ENGINES # 只有InnoDB 是支持事务 简介 事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态 事务处理的原则:保证所有事务都作为 一个工作单元 来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行 阅读全文
摘要:
优化数据库结构 拆分表:冷热数据分离 拆分表的思路是,把1个包含很多字段的表拆分成2个或者多个相对较小的表。这样做的原因是,这些表中某些字段的操作频率很高(热数据),经常要进行查询或者更新操作, 而另外一些字段的使用频率却很低(冷数据),冷热数据分离,可以减小表的宽度。如果放在一个表里面,每次查询都 阅读全文
摘要:
调优的目标 尽可能 节省系统资源 ,以便系统可以提供更大负荷的服务。(吞吐量更大) 合理的结构设计和参数调整,以提高用户操作 响应的速度 。(响应速度更快) 减少系统的瓶颈,提高MySQL数据库整体的性能。 定位调优问题 用户反馈 日志分析 服务器资源使用监控 数据库内部状态监控 调优的维度和步骤 阅读全文
摘要:
安装步骤 模型类型 概念模型(CDM Conceptual Data Model) 物理模型(PDM,Physical Data Model) 面向对象的模型(OOM Objcet Oriented Model) 业务模型(BPM Business Process Model) 创建概念模型 Fil 阅读全文
摘要:
三少一多) 数据表的个数越少越好 RDBMS的核心在于对实体和联系的定义,也就是E-R图(Entity Relationship Diagram),数据表越少,证明实体和联系设计得越简洁,既方便理解又方便操作。 数据表中的字段个数越少越好 字段个数越多,数据冗余的可能性越大。设置字段个数少的前提是各 阅读全文
摘要:
简介 ER模型也叫作实体关系模型,是用来描述现实生活中客观存在的事物、事物的属性,以及事物之间关系的一种数据模型。在开发基于数据库的信息系统的设计阶段, 通常使用ER模型来描述信息需求和信息特性,帮助我们理清业务逻辑,从而设计出优秀的数据库 ER模型包含的要素 1、实体:可以看做是数据对象,往往对应 阅读全文
摘要:
简介 目前关系型数据库有六种常见范式,按照范式级别,从低到高分别是:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF) 和第五范式(5NF,又称完美范式)。 数据库的范式设计越高阶,冗余度就越低,同时高阶的范式一定符合低阶范式的要求,满足最低要 阅读全文
摘要:
自增ID的问题 可靠性不高 存在自增ID回溯的问题,这个问题直到最新版本的MySQL8.0才修复。 安全性不高 对外暴露的接口可以非常容易猜测对应的信息。比如:/User/1/这样的接口,可以非常容易猜测用户ID的值为多少,总用户数量有多少,也可以非常容易地通过接口进行数据的爬取。 性能差 自增ID 阅读全文
摘要:
EXISTS和IN的区分 # 大表A驱动小表cc时用in;即当A表的数据量大于B表的数据量时 SELECT * FROM A WHERE cc IN (SELECT CC FROM B); # 当A表的数据量小于B表的数据量时 # 小表A驱动大表cc时用EXISTS ,因为执行时每次是从A中取一条数 阅读全文
摘要:
简介 Index Condition Pushdown(ICP)是MySQL5.6中新特性,是一种在存储擎层使用索引过滤数据的优化方式。 从二级索引中查找数据,如果二级索引中已经有了要筛选的列,但是又不能使用索引,会先从该二级索引筛选完以后再回表。 好处:ICP可以减少存储引擎必须访问基表的次数和M 阅读全文
摘要:
简介 索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据; 当能通过读取索引就可以得到想要的数据,那就不需要读取行了。一个索引包含了满足查询结果的数据就叫做覆盖索引。 非聚簇复合索引的一种形式,它包括在查询里的SELEC 阅读全文
摘要:
GROUP BY优化 1、group by使用索引的原则几乎跟order by一致,group by即使没有过滤条件用到索引,也可以直接使用索引。 2、group by先排序再分组,遵照索引建的最佳左前缀法则 3、当无法使用索引列,增大max_length_for_sort_data和sort_bu 阅读全文
摘要:
子查询 子查询是 MySQL 的一项重要的功能,可以帮助我们通过一个 SQL 语句实现比较复杂的查询。但是,子查询的执行效率不高 ① 执行子查询时,MySQL需要为内层查询语句的查询结果 建立一个临时表 ,然后外层查询语句从临时表 中查询记录。查询完毕后,再 撤销这些临时表 。这样会消耗过多的CPU 阅读全文
摘要:
Simple Nested-Loop Join(简单嵌套循环连接) 从表A中取出一条数据1,遍历表B,将匹配到的数据放到result…以此类推,驱动表A中的每一条记录与被驱动表B的记录进行判断 Index Nested-Loop Join(索引嵌套循环连接) Index Nested-Loop Jo 阅读全文
摘要:
左外连接 # 创建分类表 CREATE TABLE IF NOT EXISTS `type` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT(10) UNSIGNED NOT NULL, PRIMARY KEY (`id`) ) 阅读全文
摘要:
数据准备 # 创建数据库 CREATE DATABASE atguigudb2; USE atguigudb2; # 创建表 CREATE TABLE `class` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `className` VARCHAR(30) DE 阅读全文
摘要:
使用格式 EXPLAIN SELECT select_options 或者 DESCRIBE SELECT select_options EXPLAIN 语句输出的各个列的作用 代码案例 # 创建表 CREATE TABLE s1 ( id INT AUTO_INCREMENT, key1 VARC 阅读全文
摘要:
EXPLAIN四种输出格式 传统格式、JSON格式、TREE格式、可视化输出 输出传统格式 EXPLAIN SELECT s1.key1, s2.key1 FROM s1 LEFT JOIN s2 ON s1.key1 = s2.key1 WHERE s2.common_field IS NOT N 阅读全文
摘要:
查看系统性能参数 SHOW [GLOBAL|SESSION] STATUS LIKE '参数'; Connections:连接MySQL服务器的次数。 Uptime:MySQL服务器的上线时间。 Slow_queries:慢查询的次数。 Innodb_rows_read:Select查询返回的行数 阅读全文