日志收集
日志处理的组件
收集
存储
检索
日志收集的组件
LogStash
FileBeat
Alloy
ProTail
日志存储组件
Loki
ElaticSearch
Promentheus (时序数据库)
日志的检索组件
kibana
Grafana
日志处理的两种解决方案
重量级日志: ELK
ElaticSerach (存储)
LogStash (收集)
Kibana (检索, 可视化)
轻量级: GLA
Grafana (检索)
Loki (存储)
breakend
Loki write
Loki read
Nginx (gateWay)
Alloy (收集)
配置服务标签, 根据标签信息给日志进行分类
区别:
ELK:
Es使用java开发, 启动时占用内存大
存储: Es在存储时, 将日志的所有消息存储起来, 在查找时是一条条查找,检索速度慢
GLA:
Loki使用go语言开发, 占用内存小
引入携程优化, 速度更快
Loki在存储时, 通过给日志打上不同的标签, 通过标签来查找日志, ...
日志框架
日志框架
门面:类似于标准层、接口层
名称
说明
JCL(Jakarta Commons Logging)
陈旧
SLF4J(Simple Logging Facade for Java)
适合(同一作者)
jboss-logging
特殊专业领域使用
实现
名称
说明
log4j
最初版(同一作者)
JUL(java.util.logging)
JDK自带
log4j2
Apache收购log4j后全面重构,内部实现和log4j完全不同
logback
优雅、强大(同一作者)
使用:
SLF4J(接口)->logBak(实现)
依赖
12345<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version></dependency>
Log ...
类型转换器(Converter)
类型转换器(Converter)
在前端传进后端的是一个字符串类型时,但是后端获取的是一个枚举类,此时后端获取不到对应枚举类对象
此时就需要使用Coverter 来将String转换为枚举类对象
自定义转换器方法
枚举类ItemType
1234567891011121314public enum ItemType { APARTMENT(1, "公寓"), ROOM(2, "房间"); @Jsonvalue private Integer code; private String name; ItemType(Integer code, String name) { this.code = code; this.name = name; }}
定义转换器方法StringToItemTypeConverter
12345678910111213@Componentpublic class StringToItemTypeC ...
面试问题
1、项目中有没有使用过MySQL优化
使用过:
缓存层面: 使用缓存 \ 提高缓存的命中率
在查找专辑详情页时, 因为专辑详情页信息非常多, 是用户经常访问的请求, 所以我在处理这种请求时 ,使用了 redis作为缓存来降低对mysql 的访问.
并且为了处理数据库和缓存不一致的问题, 我采用了延迟双删的方式来,确保了数据库和缓存的最终一致性
业务维度层面: 减少不必要的sql \ 批量处理
在进行多个声音的查找时, 为了避免多次查找数据库, 我将在查找声音的详细信息时, 一次性将所有的全部id进行远程调用, 一次性查找全部的声音信息,避免了一些不必要的查找
索引优化:
建立索引 : 条件 \ order \ group 使用索引 \ 区分度高的使用使用 \ 经常查询的字段 \ 使用连表查询,避免子查询
因为在项目中,在对专辑详细进行查找时 ,进行使用 专辑的付费类型来查找专辑信息, 我对price_type这个字段设置了索引
在查看专辑的全部声音的接口中, 需要对声音信息进行排序, 而声音表中有个字段就是用来排序的, order这个字段, 我对这个字段也 ...
自定义线程池
自定义线程池
1234567891011121314151617181920212223242526272829303132333435363738394041424344package online.orange.blog.web.config;import lombok.extern.slf4j.Slf4j;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;@Slf4j@Configurationpublic class CustomThreadConfig { static final int DEFAULT_THREAD_QUEUE_SIZE = 100; static final int DEFAULT_THREAD_KEEP_ALIVE_ ...
操作日志方案
目标
记录实体类属性的变化
12345678910package com.scjt.jypm.project.annotation;public enum CompareType { DEFAULT, // 默认直接比较 USER_NICKNAME, // 根据ID查找用户昵称 BOOLEAN_TO_TEXT, // 0/1 转换为 否/是 DICTIONARY, // 字典类型比较 DATE // 时间格式化比较}
123456789101112131415package com.scjt.jypm.project.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)@Target( ...
acme+nginx证书申请
acme.sh 网站申请证书(nginx)
1️⃣安装 nginx(省略)
2️⃣安装 acme
12curl https://get.acme.sh | sh -s email=zhaoolee@gmail.comsource ~/.bashrc
❗ 申请证书的域名在申请之前要部署(这样不用进行 dns 验证),不然下面申请证书就不能成功
3️⃣网站申请证书
1acme.sh --issue -d alist.zorange.online --nginx /usr/local/nginx/conf/nginx.conf
--nginx /usr/local/nginx/conf/nginx.conf是你的 nginx.conf 路径
alist.zorange.online 是要申请的网站的域名
4️⃣拷贝证书
1234 acme.sh --install-cert -d alist.zorange.online \--key-file /usr/local/nginx/conf/ssl/alist.zorange.online/alist.zorang ...
权限菜单
表
角色表(role)
1234567CREATE TABLE role ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, description varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
菜单表(menu)
123456789CREATE TABLE `menu` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `path` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `icon` ...
Swagger
⚙️swagger3 配置
swagger官网
SwaggerConfig.java
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253package online.zorange.springboot.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import springfox.documentation.builders.ApiInfoBuilder;import springfox.documentation.builders.PathSelectors;import springfox.documentatio ...
Echarts
Echarts 官网 ⭐
📖安装
1npm i echarts -S
🔗引入
1import * as echarts from "echarts";
例子:
后端接口
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061package online.zorange.springboot.controller;import cn.hutool.core.collection.CollUtil;import cn.hutool.core.date.DateUtil;import cn.hutool.core.date.Quarter;import online.zorange.springboot.common.Result;import online.zorange.springboot.entity.User;im ...




