自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

我想做一个艺术家

年轻时,总会遇见很多人,而后你就会发现,所谓的机缘也就那么几次。

  • 博客(193)
  • 问答 (1)
  • 收藏
  • 关注

原创 多级缓存|JVM进程缓存【Caffeine】|OpenResty + Lua|Canal|Redis

传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图:存在下面的问题:• 请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈• Redis缓存失效时,会对数据库产生冲击浏览器访问静态资源时,优先读取浏览器本地缓存访问非静态资源(ajax查询数据)时,访问服务端请求到达Nginx后,优先读取Nginx本地缓存如果Nginx本地缓存未命中,则去直接查询Redis(不经过Tomcat)如果Redis查询未命中,则查询Tomcat。

2022-09-03 00:51:12 560

原创 Redis分布式缓存

在Sentinel集群监管下的Redis主从集群,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化,及时更新连接信息。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。RDB和AOF各有自己的优缺点,如果对数据安全性要求较高,在实际开发中往往会结合两者来使用。...

2022-09-01 01:36:42 659 3

原创 Redis集群|主从集群|哨兵集群|分片集群|Docker版

因为redis-trib.rb是有ruby语言编写的所以需要安装ruby环境。分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点。修改redis-6.2.4/redis.conf文件,将其中的持久化模式改为默认的RDB模式,AOF保持关闭状态。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。.

2022-08-30 21:31:05 955 1

原创 十四种锁作用及其使用

Java偏向锁(Biased Locking)是指它会偏向于第一个访问锁的线程,如果在运行过程中,只有一个线程访问加锁的资源,不存在多线程竞争的情况,那么线程是不需要重复获取锁的,这种情况下,就会给线程加一个偏向锁。如果线程并发进一步加剧,线程的自旋超过了一定次数,或者一个线程持有锁,一个线程在自旋,又来了第三个线程访问时(反正就是竞争继续加大了),轻量级锁就会膨胀为重量级锁,重量级锁会使除了此时拥有锁的线程以外的线程都阻塞。如果一个线程对数据加上共享锁后,那么其他线程只能对数据再加共享锁,不能加独占锁。

2022-08-25 16:28:50 388 2

原创 Lock作用及其使用

而非公平锁就是一种随机的分配,不关乎先后顺序,非公平锁会随机分配一个处于就绪状态的线程来获取锁并执行相应的逻辑。这种锁既然叫读写锁,表示也是两个锁,一个是读操作相关的,是共享锁;公平锁和非公平锁各有优劣,公平锁需要维护一个队列,需要知道各个线程进入就绪状态的顺序,而非公平锁则不需要,只需要每次随机分配一个已经处于就绪状态的线程即可。那么实际上,JDK同样考虑到这一点,提供了一种读写锁ReentrantReadWriteLock的支持,它可以限定读锁和写锁,在不同的锁下有不同的互斥效果。

2022-08-25 15:30:20 561

原创 synchronized使用

当然如果是一个线程 A 需要访问实例对象 obj1 的 synchronized 方法 f1(当前对象锁是obj1),另一个线程 B 需要访问实例对象 obj2 的 synchronized 方法 f2(当前对象锁是obj2),这样是允许的,因为两个实例对象锁并不同相同,此时如果两个线程操作数据并非共享的,线程安全是有保障的,遗憾的是如果两个线程操作的是共享数据,那么线程安全就有可能无法保证了。修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。

2022-08-25 00:06:28 286

原创 Redis消息队列

当我们指定起始ID为$时,代表读取最新的消息,如果我们处理一条消息的过程中,又有超过1条以上的消息到达队列,则下次获取时也只能获取到最新的一条,会出现漏读消息的问题。消费者组会维护一个标示,记录最后一个被处理的消息,哪怕消费者宕机重启,还会从标示之后读取消息。确保每一个消息都会被消费。消息队列(Message Queue),字面意思就是存放消息的队列。队列中的消息会分流给组内的不同消费者,而不是重复消费,从而加快消息处理的速度。ID:起始ID标示,$代表队列中最后一个消息,0则代表队列中第一个消息。

2022-08-24 10:14:55 1056 1

原创 基于BlockingQueue的异步处理

不可插入为null的元素,入队和出队使用的是同一个锁。直到队列不满时,再进行入队操作。当出队时,队列为空,则调用notEmpty.await(),进入阻塞状态,直到队列不为空时,则出队。LinkedBlockingQueue允许两个线程同时在两端进行入队和出队操作,但一端同时只能有一个线程进行操作,是通过两个锁进行区分的。count只能在两个地方变化,一个是入队的方法(进行+1操作),另一个是出队的方法(进行-1操作),而AtomicInteger是原子安全的,所以也就确保了底层队列的数据同步。

2022-08-23 17:02:08 568

原创 苏格拉底告诉我们什么是爱情和婚姻

柏拉图回答:“我在麦田刚走了一段路的时候,曾经看到过几株特别硕大、金黄的麦穗。当我往后走的时候,再看到的麦穗总觉得不如之前的好,所以直到麦田的尽头,我也没有选到满意的。但我汲取了上次的教训,怕最后空手而归,便选择了它。苏格拉底说:“你去麦田摘一株最大、最饱满的麦穗回来,就明白了。为了弄清楚心中的疑惑,柏拉图便听从了老师的建议,去了麦田。苏格拉底说:“你再去麦田摘一株最大、最饱满的麦穗回来,就明白了。这是一个很老的故事,但放在物欲横流的今天,仍值得品味。此时的苏格拉底笑了,他对柏拉图说:“这,就是婚姻。

2022-08-23 15:30:06 1345 5

原创 Redis分布式锁Redisson

原理:利用setnx的互斥性;释放锁时判断线程标示 缺陷:不可重入、无法重试、锁超时失效。原理:利用hash结构,记录线程标示和重入次数;利用watchDog延续锁时间;利用信号量控制锁重试等待。分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。在释放锁时先获取锁中的线程标示,判断是否与当前线程标示一致。在获取锁时存入线程标示(可以用UUID表示)缺陷:redis宕机引起锁失效问题。互斥:确保只能有一个线程获取锁。如果不一致则不释放锁。

2022-08-23 14:07:10 857 2

原创 Ribbon和LoadBalancer自定义负载均衡算法及配置

实现IRule接口,自定义算法新建类,不可是配置类在配置类上注入自定义类。

2022-08-20 20:03:39 591 1

原创 Ribbon的随机算法,为什么能难倒这么多的微服务专家?

在BaseLoadBalancer#setServersList中会设置服务的存活状态,同时也会同步可达服务列表和所有服务列表,并且此任务是30s执行一次,同步Nacos的服务缓存数据。问了很多人,上到各大厂相关领域的专家,下到一些所谓的高端人员,再到国内外网站,没有人注意到这个问题。看完类和方法的介绍,其实就能知道整体的设计了,为了提高我们的认知,我们来看看设计的细节。前人栽树,后人乘凉。对于整体的设计思想,我们不难理解,根据服务名获取所有的服务列表,根据负载均衡器规则再选出一个服务。

2022-08-19 11:55:58 1004 8

原创 Ribbon源码解析

Ribbon会为被@LoadBalanced注解标注的RestTemplate实例添加一个拦截器LoadBalancerInterceptor,在restTemplate调用时拦截器会拦截请求,根据负载均衡策略,通过服务名选择一个server,将url中的服务名替换为对应的ip:host再调用,达到负载均衡。可以看到是RibbonLoadBalancerClient,通过查看构造方法的调用,发现是在RibbonAutoConfiguration中创建的,看到ribbon,看来是跟ribbon相关的了。...

2022-08-13 17:23:03 514 3

原创 RestTemplate源码解析

一句话概括RestTemplate,RestTemplate封装了原生的HttpURLConnection,采用Restful的理念,更优雅地来完成对HTTP服务的调用。

2022-08-11 17:04:44 801 3

原创 ThreadLocalRandom的作用及其使用

这里设计为了延迟初始化,另外变量 instance 是个 ThreadLocalRandom 的一个实例,该变量是 static 的,当多线程通过 ThreadLocalRandom 的 current 方法获取 ThreadLocalRandom 的实例时候其实获取的是同一个,但是由于具体的种子是存放到线程里面的,如果每个线程维护自己的一个种子变量,每个线程生成随机数时候根据自己老的种子计算新的种子,并使用新种子更新老的种子,然后根据新种子计算随机数,就不会存在竞争问题,这会大大提高并发性能。...

2022-08-11 15:32:56 741

原创 OkHttp的作用及其使用

OkHttp 是一套处理 HTTP 网络请求的依赖库,由 Square 公司设计研发并开源,目前可以在 Java 和 Kotlin 中使用。依赖。

2022-08-11 15:25:02 361

原创 httpclient作用及其使用

前几篇文章我们讲述了URLConnection,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性,它不仅使客户端发送Http请求变得容易,而且也方便开发人员测试接口(基于Http协议的),提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会更加深入。...

2022-08-11 14:58:15 645

原创 HttpURLConnection作用及其使用

HTTPURLConnection是URLConnection的抽象子类。它包含的方法可以获得和设置请求方法,确定是否重定向,获得响应码和消息,确定是否使用了代理服务器。常用API接口。

2022-08-11 12:08:04 403

原创 URLConnection的作用及其使用

URLConnection是一个抽象类,表示指向URL指定资源的活动连接。URLConnection可以检查服务器发送的首部,并相应地做出响应。它可以设置客户端请求中使用的首部字段。最后URLConnection可以用POST、PUT和其他HTTP请求方法向服务器发回数据;URLConnection类是Java的协议处理器机制的一部分;...

2022-08-11 11:54:29 1046 1

原创 RestTemplate作用及其使用

在返回的 ResponseEntity 中,可以获取响应头中的信息,其中 getStatusCode 方法用来获取响应状态码, getBody 方法用来获取响应数据, getHeaders 方法用来获取响应头,在浏览器中访问该接口。去表示,第二个参数是接口返回的数据类型,最后是一个可变长度的参数,用来给占位符填值。getForObject 和 getForEntity 的差异主要体现在返回值上, getForObject 的返回值就是服务提供者返回的数据,使用 getForObject 无法获取到响应头。.

2022-08-10 16:43:30 855 2

原创 Java合并word文档的两种方式

Java合并word文档的两种方式。

2022-08-10 10:50:10 1727 1

原创 @RequestParam的作用及使用

RequestParam可以加在方法参数前}不加@RequestParam前端的参数名需要和后端控制器的变量名保持一致才能生效不加@RequestParam参数为非必传,加@RequestParam写法参数为必传。但@RequestParam可以通过@RequestParam(required = false)设置为非必传。@RequestParam可以通过@RequestParam(“param”)或者@RequestParam(value = “param”)指定传入的参数名。...

2022-08-10 10:31:17 813

原创 Nacos是如何实现心跳机制和服务续约以及超时剔除服务机制的?

上一篇文章,我们全面解析了Nacos是如何实现服务注册的,那么这篇文章,就来看看Nacos是如何实现心跳机制和健康检查机制的。

2022-08-07 05:12:47 2090 2

原创 【七夕快乐篇】Nacos是如何实现服务注册功能的?

那么接下的几天里,我们就来逐步分析一下Nacos的源码以及Nacos的核心功能与机制,并着手写一个注册中心,来帮助大家更好的了解分布式中间件。

2022-08-04 16:11:55 3748 67

原创 Spring源码之finishRefresh()

最后,我们会来到WebServerManager#start,在这里发布了Nacos服务注册的事件。我们重点跟进这个方法refreshContext(context);还记得我们的启动类么?

2022-08-04 15:43:53 423 4

原创 注解@EnableAutoConfiguration的作用以及如何使用

@EnableAutoConfiguration

2022-08-04 14:04:56 1266 1

原创 Java监听器的作用以及如何使用

Java监听器

2022-08-04 12:25:05 2179 1

原创 @Async注解的作用以及如何实现异步监听机制

使用@Async标注在方法上,可以使该方法异步的调用执行。而所有异步方法的实际执行是交给TaskExecutor的。在需要异步执行的类上标注@Async,比如,我们现在有一个需要监听的事件。如下方式会使@Async失效。......

2022-08-04 12:14:57 553 1

原创 @Import注解的作用以及如何使用

-

2022-08-04 11:25:58 723 1

原创 基于Appian低代码平台开发一个SpaceX网站

国内几乎没有Appian的任何相关资料,于是我去官网一顿摸索…官网的学习资料也比较散乱,想上手还是不太容易,把学习结果记录下来,供大家学习和参考。因为国内访问不了Apian的官网,所以需要想办法访问国外网络。...

2022-08-03 14:53:25 1051 1

原创 分布式中的CAP原理

那么如果想要二者取到的data值一样(满足C(Consistency强一致性)),就需要等待网络通信正常,将数据同步到其他注册中心,可是在等待网络通信的过程中,服务是无法工作的,也就是说不能满足A(Availability可用性)。AP对于大部分的业务,AP还是最常用的选择,比如Eureka就是AP的架构,为了保证系统的可用性,牺牲一些一致性,也是可以接受的。就目前的技术而言,CAP不可能满足全部三项,当然随着技术的不断推动,如果解决了网络通信的问题,是有可能全部满足的。...

2022-08-01 11:42:51 791 3

原创 微服务原生案例搭建

Spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接,我们只需要传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。在Spring应用程序中访问第三方REST服务与使用SpringRestTemplate类有关。...

2022-08-01 11:39:44 714 1

原创 分布式中的远程调用

在微服务架构中,通常存在多个服务之间的远程调用的需求。远程调用通常包含两个部分序列化和通信协议。常见的序列化协议包括json、xml、hession、protobuf、thrift、text、bytes等,目前主流的远程调用技术有基于HTTP的RESTful接口以及基于TCP的RPC协议。...

2022-08-01 11:35:00 495 1

原创 微服务系统架构的演变

SOA全称为Service-OrientedArchitecture,即面向服务的架构。它可以根据需求通过网络对松散耦合的粗粒度应用组件(服务)进行分布式部署、组合和使用。一个服务通常以独立的形式存在于操作系统进程中。站在功能的角度,把业务逻辑抽象成可复用、可组装的服务,通过服务的编排实现业务的快速再生,目的把原先固有的业务功能转变为通用的业务服务,实现业务逻辑的快速复用。通过上面的描述可以发现SOA有如下几个特点分布式、可重用、扩展灵活、松耦合。...

2022-08-01 11:30:41 866 3

原创 2万字带你从0到1搭建一套企业级微服务安全框架

基于Spring Security、Redis、JWT的企业级微服务安全框架。

2022-07-25 11:30:08 4576 62

原创 Docker从入门到精通|2022版

docker零基础入门|保姆级教程

2022-07-19 08:49:25 7179 53

原创 【微服务|Spring Security③】基于Session的认证方式|实现认证功能

基于Session的认证方式|实现认证功能以上的测试全部符合预期,到目前为止最基础的认证功能已经完成,它仅仅实现了对用户身份凭证的校验,若某用户认证成功,只能说明他是该系统的一个合法用户,仅此而已。...

2022-07-08 17:29:47 767

原创 【微服务|Spring Security②】基于Session的认证方式|认证流程|工程搭建

基于Session的认证方式|认证流程|工程搭建

2022-07-08 17:24:47 1198

原创 【微服务|Spring Security①】初识认证和授权

2、为什么要认证?3、认证的定义?4、常见的用户身份认证方式都有哪些?2、为什么要授权?3、授权的定义?1.5.2 资源访问控制1.6 小结以上的这些概念,也并非Spring Security独有,而是应用安全的基本关注点,Spring Security可以帮助我们更加快捷的完成认证和授权。很多时候,一个系统的安全性完全取决于系统开发人员的安全意识。例如,在我们从未听过SQL注入的时候,如何意识到要对SQL注入做防护?关于Web系统安全的攻击方式非常多,诸如:XSS、CSRF等,未来还会

2022-07-08 17:20:38 706 1

原创 【微服务|SCG】gateway整合sentinel

sentinel服务1.6.0以上的版本可支持整合网关进行统一流控。

2022-07-07 13:25:55 1414 11

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除