框架篇
框架篇内容
SpringMybatis
MySQL篇
MySQL篇场景
MySQL-优化在MySQL中,如何定位慢查询?聚合查询多表查询表数据量过大查询深度分页查询
表象:页面加载过慢、接口压测响应时间过长(超过1s)
如何定位慢查询 ?方案一:开源工具调试工具: Arthas运维工具: Prometheus、Skywalking方案二: MySQL自带慢日志慢查询日志记录了所有执行时间超过指定参数 (long_query_time,单位:秒,默认10秒)的所有SQL语句的日志如果要开启慢查询日志,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:开启MySQL慢日志查询开关slow_query_log=1设置慢日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志long_query_time=2配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息/var/lib/mysql/localhost-slow.log
总结:
介绍一下当时产生问题的场景(我们当时的一个接口测试的时候非常 ...
Redis篇
Redis篇场景
缓存穿透
缓存穿透:查询一个不存在的数据,mysql查询不到数据页不会直接写入缓存,就会导致每次请求都查询数据库。解决方案一:缓存空数据,查询返回的数据为空,扔把这个空结果进行缓存优点:简单缺点:消耗内存,可能会发生不一致的问题
解决方案二:布隆过滤器优点:内存占用较少,没有多余key缺点:实现复杂,存在误判
缓存击穿
缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮解决方案一: 互斥锁解决方案二: 逻辑过期
缓存雪崩
缓存雪崩:是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。
解决方案:
给不同的Key的TTL添加随机值
利用Redis集群提高服务的可用性 哨兵模式、集群模式
给缓存业务添加降级限流策略 Nginx、Spring Cloud Gateway
给业务添加多级缓存 Guava或Caffeine
注:降级可做为系统的保底策略,适用于穿透、击穿、雪崩
《缓存三兄弟》穿透无中生有key, ...
阿里巴巴Java开发手册
注:此手册版权归阿里巴巴集团所有,博主只是为了在开发时方便查阅而已,禁止商用。
阿里巴巴Java开发手册终极版 1.3.0目录一、编程规约 (一)命名风格 (二)常量定义 (三)代码格式 (四)OOP规约 (五)集合处理 (六)并发处理 (七)控制语句 (八)注释规范 (九)其它二、异常日志 (一)异常处理 (二)日志规约三、单元测试四、安全规约五、MySQL数据库 (一)建表规约 (二)索引规约 (三)SQL语句 (四)ORM映射六、工程结构 (一)应用分层 (二)二方库依赖 (三)服务器
附页:本手册专有名词
一、编程规约(一)命名规范
【强制】 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反例: _name / _name / $Object / name / name$ / Object$
【强制】 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。说明: 正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用 ...
第一篇文章
这是我的第一篇文章