- 博客(13)
- 收藏
- 关注
原创 Dubbo-01 高级特性
1. SPI1.1 SPI简介SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现,简单来说,它就是一种动态替换发现的机制。使用SPI机制的优势是实现解耦,使得第三方服务模块的装配控制逻辑与调用者的业务代码分离。1.2 JDK中的SPIJava中如果想要使用SPI功能,先提供标准服务接口,然后再提供相关接口实现和调用者。这样就可以通过SPI机制中约定好的信息进行查询相应的接口实现。SPI遵循如下约定
2021-03-06 17:37:58 197
原创 Rabbitmq-02 工作流程和消息保障
Rabbitmq工作流程详解生产者发送消息的流程生产者连接RabbitMQ,建立TCP连接( Connection),开启信道(Channel) 2. 生产者声明一个Exchange(交换器),并设置相关属性,比如交换器类型、是否持久化等生产者声明一个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等生产者通过 bindingKey (绑定Key)将交换器和队列绑定( binding )起来生产者发送消息至RabbitMQ Broker,其中包含 routingKey (路由键)、交换
2021-03-06 14:40:07 342
原创 Rabbitmq-01 概念和结构
消息中间件概念消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。面向消息的系统(消息中间件)是在分布式系统中完成消息的发送和接收的基础软件。异步处理、流量削峰、限流、缓冲、排队、最终一致性、消息驱动等需求的场景都可以使用消息中间件。自定义消息中间件**BlockingQueue(阻塞队列)**是java中常见的容器,在多线程编程中被广泛使用。当队列容器已满时生产者线程被阻塞,直到队列未满后才可以继续put;当队列容器为
2021-03-04 23:17:48 200 1
原创 Redis-04 Redis的扩展功能
发布与订阅Redis提供了发布订阅功能,可以用于消息的传输。Redis的发布订阅机制包括三个部分,publisher,subscriber和Channel发布者和订阅者都是Redis客户端,Channel则为Redis服务器端发布者将消息发布到频道上,订阅了这个频道的订阅者就能接收到消息(有点类似Rabbitmq消息队列的生产者消费者模型)频道/模式的订阅与退订subscriber:订阅 subscribe channel1 channel2 …Redis客户端订阅频道1和频道2127.0
2021-03-04 10:05:56 139
原创 Redis-03 持久化
为什么要持久化?Redis是内存数据库,宕机后数据会消失。Redis重启后快速恢复数据,要提供持久化机制Redis持久化是为了快速的恢复数据而不是为了存储数据Redis有两种持久化方式:RDB和AOF注:Redis持久化不保证数据的完整性。RDBRDB(Redis DataBase),是redis默认的存储方式,RDB方式是通过快照(snapshotting)完成的。只保存这一刻的数据,不关注过程。触发快照的方式符合自定义配置的快照规则执行save或者bgsave命令。执行fl
2021-03-02 21:31:54 109
原创 Redis-02 缓存过期和淘汰策略
1. 缓存过期1.1 maxmemorymaxmemory:默认为0不限制。问题:超过物理内存后性能急剧下降,甚至崩溃,内存与硬盘交换(swap) 虚拟内存 ,频繁IO 性能急剧下降。当趋近maxmemory时,通过缓存淘汰策略,从内存中删除对象。设置方式:在redis.conf中maxmemory 1024mb##获取配置命令config get maxmemory1.2 expire使用expire命令设置一个键的存活时间(ttl:time to live),过了这段时间,该键就会自
2021-03-02 14:23:13 113
原创 Redis-01 数据类型与数据结构
1. Redis 简介Redis 是一个key-value的存储系统,使用ANSI C语言编写,key的类型是字符串,value的类型有:string 字符串类型list 列表类型set 集合类型sortset 有序集合类型hash类型bitmap类型geo地理位置类型stream流类型Reids的命令不区分大小写,key value 区分大小写。2. Redis底层结构2.1 RedisDB结构typedef struct redisDb { int id; //id是
2021-02-28 21:45:55 157 1
原创 TomCat-01 系统架构
1. 浏览器访问服务器的流程用户发起请求到浏览器浏览器发送TCP连接请求到Tomcat服务器Tomcat服务器接收请求并且建立连接浏览器生成HTTP格式的数据包浏览器发送请求数据包Tomcat服务器接收请求数据包并进行解析Tomcat服务器执行对应的请求(这一步设计到具体的执行流程,比较重要)Tomcat生成HTTP格式的数据包发送响应数据包给浏览器浏览器解析HTTP的数据包浏览器呈现静态数据给用户浏览器访问服务器使用的是HTTP协议,Http是应用层协议,用于定义数据通信的
2021-02-24 15:57:55 110
转载 使用策略模式和工厂模式干掉if-else
对于业务开发来说,业务逻辑的复杂是必然的,随着业务发展,需求只会越来越复杂,为了考虑到各种各样的情况,代码中不可避免的会出现很多if-else。一旦代码中if-else过多,就会大大的影响其可读性和可维护性。首先可读性,不言而喻,过多的if-else代码和嵌套,会使阅读代码的人很难理解到底是什么意思。尤...
2019-12-21 15:48:27 381
转载 Linux 下ZooKeeper安装
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...
2019-10-16 15:08:32 90
转载 Git如何优雅的进行版本回退:git reset 和 git revert区别
在版本迭代开发过程中,相信很多人都会有过错误提交的时候(至少良许有过几次这样的体验)。这种情况下,菜鸟程序员可能就会虎驱...
2019-10-15 15:55:36 156
转载 Scanner 与 Readable 的read()方法的关系
Scanner 与 Readable 的read()方法的关系Readable接口中的read()方法实现了将字符串读入charBuffer中,但是只有在需要输出的时候才会调用。Scanner是文本扫描器类,利用Scanner扫描并输出charBuffer中的内容的顺序:以hasNext()方法为例:第一次调用 hasNext(),由于此时charBuffer并无内容,等待输入,hasNext...
2019-09-04 15:27:45 265
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人