- 博客(74)
- 收藏
- 关注
原创 响应20毫米内的请求如何处理
把数据加工号,然后存在redis里,但是也有可能给redis弄满,所以这一方案还得进行redis的调优。解决方案一:从http调用请求修改,改为GRPC请求,因为http有许多多余的参数,header,cookie之类的,而GRPC没有那么多东西,所以能更快一点。然后上游服务http请求过来,再通过数据库去查,在返回。解决方案三:每30分钟,处理一次接口把它从redis里放在程序缓存里,去处理。需求:由于上游服务要求响应速度,必须要在10毫秒内返回结果,否则不能处理。
2023-11-16 15:46:26
173
原创 联合索引、覆盖索引和索引下推
联合索引(也叫组合索引、复合索引、多列索引)是指对表上的多个列进行索引。联合索引的创建方法跟单个索引的创建方法一样,不同之处仅在于有多个索引列。下面我们给出一个需求:查询表中以字母"L"开头的姓名及年龄。1、常规的写法(回表查询)优化写法(索引覆盖)因为我们要查询name和age。
2023-05-08 10:08:12
642
1
原创 Lock锁心得
获取lock锁的四种方法:lock(),trylock(),trylock(time,unit),lockInterruptibly()
2023-03-01 17:58:38
456
原创 为什么需要在拦截器删除threadLocal中的数据
根源:由于Entry的key弱引用特性(见注意),当每次GC时JVM会主动将无用的弱引用回收掉,因此当ThreadLocal外部没有强引用依赖时,就会被自动回收,这样就可能造成当ThreadLocal被回收时,相当于将Map中的key设置为null,但问题是该key对应的entry和value并不会主动被GC回收,threadLocal的应用主要是对一个线程内的变量进行传递不会创建对象,比如在全局日志里的应用,数据库连接池的应用也是。第一:因为在实际中的使用的时候,我们使用的tomcat的。
2023-02-06 17:51:53
1121
原创 利用mybatis拦截器注解处理sql
/ 通过mybatis的反射来获取对应的值,目的是找到方法的基础信息。建个类 实现 Interceptor接口,重写intercept方法;// id字段对应执行的SQL的方法的全路径,包含类名和方法名。这样就可以在每条sql的时候做判断,方便做统一处理。// 动态加载类并获取类中的方法。// 获取方法上的注解以及注解对应的参数。// 反射获取参数对象。// 获取拦截器拦截的设置参数对象。//获取名称 用来判断是否是入参。//首先获取该xml信息。//获取参数,然会做处理。
2023-02-06 12:01:23
868
原创 spring-boot-starter-parent 和 spring-boot-dependencies 的区别
经查阅官方文档得知,可能有人不喜欢继承spring-boot-starter-parent POM。也可能有自己的企业标准parent。如果你不想使用spring-boot-starter-parent,你依然可以通过使用spring-boot-dependencies的scope=import利用依赖管理的便利。=import 是用来实现多继承。在依赖管理中用的spring-boot-dependencies。......
2022-08-31 11:45:56
488
原创 Spring Boot的自动配置原理
而诸多的XxxxAutoConfiguration自动配置类,就是Spring容器的JavaConfig形式,作用就是为Spring 容器导入bean,而所有导入的bean所需要的属性都通过xxxxProperties的bean来获得。那么所有其他的和这个类相关的属性都可以在全局配置文件中定义,也就是说,真正“限制”我们可以在全局配置文件中配置哪些属性的类就是这些。Spring Boot的出现得益于“比配置更熟悉”的理念,没有复杂的配置、难以集成的内容(集成了很多流行的第三方技术)。...
2022-08-31 11:36:30
74
原创 maven拉包和打包
与repositories中的repository不同的是,distributionManagement中分为repository和snapshotRepository,但里面的字段大致与repositories中的repository内的相同。updatePolicy,构件更新的策略,可选值有daily, always, never, interval:X(其中的X是一个数字,表示间隔的时间,单位min),默认为daily。它里面的字段和用法与repositories中的repository基本一致。
2022-08-25 17:17:57
330
原创 mvn打包中常用plugin个个插件总结
作用:主要是生命jdk编译版本,如果我们不告诉它我们的代码要使用什么样的 jdk 版本编译的话,它就会用 maven-compiler-plugin 默认的 jdk 版本来进行处理,这样就容易出现版本不匹配,以至于可能导致编译不通过的问题.作用:主要是将项目中的资源文件编译、打包;注意,资源文件不是源代码,一般是环境的配置文件,默认存在src/main/resources和src/test/resources中.作用:springboot的maven打包方式和传统的maven打包生成的结果不一样。
2022-08-25 16:33:24
791
原创 Correct the classpath of your application so that it contains compatible versions of the classes io.
错误检查
2022-07-27 17:12:45
816
原创 数据库Case when的用法
Case when 的用法: 一旦满足了某一个WHEN, 则这一条数据就会退出CASE WHEN , 而不再考虑 其他CASE;Case when 的用法-- 搜索Case函数:Case函数(Case搜索函数): 判断表达式的真假,如果为真,返回结果;如果为假,返回else值;如果未定义else值,则返回空值(使用条件确定返回值);select name,id,(case when id=34 then salary*2 when i
2022-07-04 11:27:26
2720
原创 java启动数据源报错
1.首先检查配置文件数据库是否配置正确。2.检查你配置的数据源,如果你就引了spring的。那在配置类上添加@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})如果你也引入了阿里的包<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter
2022-05-19 14:47:49
560
原创 shardingsphere :数据库分库分表
首先拉jar包<!--导入数据库驱动--><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope></dependency><!--导入分库 shardingsphere--><depend
2022-05-19 11:45:21
439
原创 类上<T extends U>有什么用
建二个类public class Query {}继承第一个public class QueryGo extends Query {}建立测试类public class user<T extends Query> { private T id; public static void main(String[] args) { user<Query> test1 = new user<>(); .
2022-04-20 17:05:45
277
原创 IDEA Eval Reset 使用方法
IDEA Eval Reset 使用方法安装插件离线安装方式1、下载插件下载地址:https://plugins.zhile.io/files/ide-eval-resetter-2.1.6.zip2、安装插件直接下载插件 zip 包(macOS 可能会自动解压,然后把 zip 包丢进回收站)通常可以直接把 zip 包拖进 IDE 的窗口来进行插件的安装。如果无法拖动安装,你可以在Settings/Preferences... -> Plugins 里手动安装插件(Install P
2022-04-11 14:48:32
8011
原创 关于redis序列化的问题
工作中遇到一个reids序列化问题,当你存储map的时候,传统的:GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); // 采用Json序列化 redisTemplate.setHashValueSerializer(jsonRedisSerializer); redisTemplate.setValueSerializer(jsonRedisSerializer
2022-03-31 12:03:54
1363
原创 微服务通过feign.RequestInterceptor传递参数
Feign支持请求拦截器,在发送请求前,可以对发送的模板进行操作,例如设置请求头等属性,自定请求拦截器需要实现 feign.RequestInterceptor 接口,该接口的方法 apply 有参数 template ,该参数类型为 RequestTemplate,我们可以根据实际情况对请求信息进行调整,示例如下: 创建自定义请求拦截器,在发送请求前增加了一个请求头信息,进行身份校验。 具体代码参考如下: 1 2 3 4 5 6 7.
2022-03-24 16:41:22
981
转载 Spring Cloud Gateway:GlobalFilter和GatewayFilter的区别与联系
. global filter和gateway filter区别1.1 接口定义不一样global filter和gateway filter是分别定义了一个接口,他们的结构看起来很像,下面是glogal filter的定义:// GlobalFilter自己就是一个单独的接口,没有任何继承关系,里面就一个方法filter。简单理解英文:// GlobalFilter是一个拦截样式,链路方式处理web请求,用来实现横切面,以及一些安全,超时等需求/*** Contract for int..
2022-03-24 14:17:53
2686
转载 spring中过滤器(filter)、拦截器(interceptor)和切面(aop)的执行顺序
1.程序执行的顺序是先进过滤器,再进拦截器,最后进切面。注意:如果拦截器中preHandle方法返回的为false时,则无法进入切面,例子如下@RestController@RequestMapping("/user")public class UserController { @GetMapping("/{id:\\d+}") @JsonView(User.UserDetailView.class) public User getInfo(@PathVariable St...
2022-03-24 10:50:33
4683
转载 java8-流的操作
流的操作流的使用一般包括三件事:一个数据源来执行一个查询;一个中间操作链,形成一条流的流水线;一个终端操作,执行流水线,并能生成结果中间操作操作 类型 返回类型 操作参数 函数描述符 filter 中间 Stream Predicate T -> boolean map 中间 Stream Function<T,R> T->R limit 中间 Stream
2022-03-22 15:05:01
430
原创 @JsonIgnore注解的作用
@JsonIgnore 这个注解作用:json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。主要是用在出参上,不让前端看到这个字段。我理解的就是将这个字段的set方法给干掉。Serializable 简单的了解,就是序列化是调用方法的set方法,反序列化就是调用get方法。serialVersionUID成员,如果你的类没有提供serialVersionUID,那么编译器会自动生成,而这个serialVersionUID就是对象的hash code值。那么如果加入.
2022-03-22 11:29:22
1872
原创 如何确保是否命中索引
在数据库中查询点击解释会有这个展示出来:我们只需要注意一个最重要的type 的信息很明显的提现是否用到索引:type结果type结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL一般来说,得保证查..
2022-03-10 11:25:53
1202
转载 Redis集群模式
再认识redis集群前,若想先知道redis单机版的可查看,springboot整合redis。好了,下面开始了。每个redis实例可称为一个节点,安装redis并以默认端口启动是节点,不关闭,以另一个端口启动,是一个新节点。在另一台机器安装redis并启动,也是一个新节点。节点分为主节点 (master) ,从节点 (slave) ,数据从主节点向多个从节点上同步 。redis3.0开始支持集群,redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(nod
2022-02-24 12:01:41
320
原创 jvm的类加载器和双亲委派机制
(1)启动类加载器Bootstrap ClassLoader,他主要是负责加载我们在机器上安装的Java目录下的核心类的 相信大家都知道,如果你要在一个机器上运行自己写好的Java系统,无论是windows笔记本,还是linux服务器,是不是都得装一下JDK?那么在你的Java安装目录下,就有一个“lib”目录,大家可以自己去找找看,这里就有Java最核心的一些类库,支撑你的Java系统的 运行。所以一旦你的JVM启动,那么首先就会依托启动类加载器,去加载你的Java安装目录下的“lib”目录中
2022-02-17 10:57:47
290
原创 内存耗尽之后,redis会发生什么
首先,我们在设置缓存的时候,要加一个过期时间,这样可以避免无效数据占用大量缓存。也可以选择加集群。但是即使加过期时间,也有可能内存会满,那redis会发生什么呢。这个时候就会用到内存淘汰策略,那么什么是内存淘汰策略呢。他就相当于清除掉那些占用内存并且使用不太频繁的数据,淘汰掉这些不活跃数据来清理内存。我们知道,redis设置配置文件的maxmemory参数,可以控制其最大可用内存大小(字节)。config set maxmemory 1GB 来动态修改...
2022-02-09 11:16:26
1056
原创 Redis到底是单线程还是多线程
redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,是为了解决高并发、高扩展,大数据存储等一系列的问题而产生的数据库解决方案,是一个非关系型的数据库。它支持的数据结构类型包括五种基本类型:字符串(String)、链表(lists)、哈希表(hash)、集合(set)、有序集合(Zset),三种高级类型:GEO(存储地理位置),Bitmaps(以极小的单位来运算亿级数据量的去重等操作),HyperLogLogs(搜...
2022-01-26 16:39:01
114
原创 mysql聚簇索引和非聚簇索引的区别
聚簇索引是mysql每一个表中都要有的一个索引,一般来说第一行的主键id就是聚簇索引,他是唯一的,不重复的,如果你没有选择主键,他会选择一个合适的当这个聚簇索引,如果都没有,那会自动生成一个列,用来当这个索引。mysql查询的时候可以根据这个聚簇索引直接查询到这个id的数据。而非聚簇索引则没有这些要求,可以建造很多,在查询的时候,他的叶子节点存储的是索引列的值,它的数据域是聚簇索引即ID。如下图:可以根据情况选择创建索引,当然索引并不是越多越好,开销和维护都会花费一定时间。所以要...
2022-01-26 16:26:01
1070
原创 mysql查询如何优化
mysql开启慢查询日志记录,先查看 show variables like '%quer%';参数说明:slow_query_log : 是否已经开启慢查询slow_query_log_file : 慢查询日志文件路径long_query_time : 超过多少秒的查询就写入日志log_queries_not_using_indexes 如果值设置为ON,则会记录所有没有利用索引的查询(性能优化时开启此项,平时不要开启)如何开启呢 set global slow_query_l
2022-01-26 16:07:52
1217
原创 关于nginx如何根据域名去转发路由
nginx在配置文件中,加入你的域名是a.fly.com,那么你这么写即可:server {listen 80;server_name a.fly.com;location / { root /data/web-a/dist;index index.html;}}这样就可以转发你需要的项目里。有的小伙伴可能会有这样的想法,nginx和gateway都是做负载均衡的,不要nginx行不行。我在查阅相关资料后得出结论:Nginx在其中扮演的角色是什么?
2022-01-21 16:04:36
2252
原创 maven之spring-boot-dependencies篇
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>im.
2022-01-14 10:25:12
12460
2
原创 java内存优化之SoftReference
首先,引用对象在Java定义中有四种类型,从弱到强依次为:强引用、软引用、弱引用与虚引用。(一)强引用(默认存在)强引用,是在实际开发中最为普遍的引用。有时候你开发的时候,申请一个内存空间的时候,就已经是强引用了。例如: Object obj =new Object(); // 强引用在强引用中,如果不让该对象指向为空,垃圾回收器绝对不会回收它。除非当出现内存空间不足的时候。jvm抛出oom导致程序异常种植的时候,才会回收具有强引用的对象来解决内存空间不足问题...
2021-12-24 09:58:31
615
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人