一些小知识
Mysql查询性能优化总结
1.设计合理的表结构,三大范式标准;
(
数据库范式是一种设计数据库的规范,用来减少数据冗余和提高数据的一致性。三大范式是指数据库设计中的三个重要范式,分别是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。这三个范式依次解决了数据冗余和数据依赖的问题。
1. 第一范式(1NF):要求数据库表中的每个列都是不可再分的原子值,即每个列都不可再分成更小的数据项。这样可以避免数据冗余和数据依赖问题。
2. 第二范式(2NF):要求数据库表中的每个非主键列完全依赖于主键,即非主键列不能依赖于主键的一部分。这样可以避免部分依赖的问题,确保数据的一致性。
3. 第三范式(3NF):要求数据库表中的每个非主键列之间不存在传递依赖,即非主键列之间不能相互依赖。这样可以避免传递依赖的问题,确保数据的独立性和一致性。
通过遵循这三个范式,可以设计出结构合理、数据一致的数据库模型,提高数据库的性能和可维护性。
)
2.表字段类型里面的varchar替换为int来代替;
3.对于经常需要联合查询的表,增加中间表;
4.对经常查询的字段添加索引;
5.查询优化, 5.1只查询需要的字段,避免使用select *(); 5.2小表驱动大表,小的数据集去驱动大的数据集
6.对mysql进行配置优化;
7.考虑是否开启事务,不开启事务选择mylSAM存储引擎
mybatis查询结果与实体类名字不相同的处理方法
1.在sql语句当中起别名;
2.手动进行结果集映射(通过@Results和@Result进行手动结果映射);
3.开启驼峰命名;(前期是命名数据库表的命名符合命名规范);
关于mybtis的XML文件的一些配置规范
1.mapper标签里面的namespace的属性要和mapper接口的全限定类名一致,并将XML文件放置在相同包下(同包同名);
2.id对应mapper接口方法的方法名一致,并且保持返回的类型一致;
3.resultType返回结果的类型(代表单条记录所要封装的类型);
Redis缓存系统常见问题以及解决方案
1.缓存穿透问题;
1.1如何理解缓存穿透?
黑客攻击缓存发送一些无效数据,Redis缓存系统里面没有这些数据,执行大量的无效查询,导致mysql访问量增大,数据库访问压力增大;
如何解决缓存穿透问题?
缓存空对象(当执行访问无效查询的时候,访问数据库没有查询到数据库的时候,返回空对象进行缓存,这个的缺点是,访问空数据多时进行缓存,会导致缓存内存紧张,浪费质量,存储大量空对象)
使用布隆过滤器(布隆过滤器查询到的没有的一定没有,然而查询到有的不一定有,其本质上时一种数据结构)
1.2.如何理解缓存击穿?
缓存击穿即是当一些热点数据缓存失效的时候或者非热点事件的访问量增大的时候,导致访问数据库次数增大;
如何解决缓存击穿问题?
比较粗暴的解决办法,设置缓存数据永不过时;
对数据库进行加锁,即第一个请求访问到数据以后,将数据缓存,之后的请求通过缓存来获取数据;
1.3如何理解缓存雪崩问题?
缓存雪崩即是Redis缓存突然宕机,或者数据的key失效,导致大量的用户请求涌入到数据当中请求数据;导致数据库访问量暴增;
如何解决缓存雪崩问题?
对请求进行限流降级(简单来说就是控制数据库的访问量,让请求进行排队对数据库进行请求)
搭建Redis主从架构或者集群架构
对数据进行预热
设置缓存key的不同过期时间
Redis数据持久化
一共有两种数据持久化的方式,RDB和AOF
RDB:简单来说就是拍摄快照,在一定的间隔时间将缓存的数据通过生成的快照存储到磁盘当中去(该方法持久化的缺点就是,如何突然断电,可能会导致数据丢失)
AOF:将执行过的指令记录下来,(缺点就是生成的AOF文件可能会很大)
AOF还有重写机制,对AOF文件进行瘦身,在重写的时候会建立AOF临时文件,临时文件是为了避免在重写过程中因为意外丢失数据;
springboot自动装配

Nginx反向代理
Nginx反向代理是指Nginx服务器作为客户端请求的代理服务器,将客户端的请求转发给后端服务器,并将后端服务器的响应返回给客户端。这种代理方式隐藏了后端服务器的真实地址,提供了负载均衡、缓存、安全过滤等功能。
在Nginx中配置反向代理需要设置代理服务器的地址和端口,以及定义代理规则。例如,可以通过配置Nginx将所有来自客户端的请求转发到后端服务器的地址和端口,或者根据不同的URL路径将请求转发到不同的后端服务器。
通过使用Nginx反向代理,可以实现负载均衡,提高系统的稳定性和性能;同时也可以实现安全过滤,保护后端服务器免受恶意攻击。反向代理还可以实现内容缓存,加快客户端访问速度。
总之,Nginx反向代理是一种重要的服务器配置方式,可以提高系统的安全性、性能和可扩展性。
浙公网安备 33010602011771号