自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (3)
  • 收藏
  • 关注

原创 分布式实战-分布式事务(三)

事务的概念1、锁的问题 ----- 多对一的问题 ------ 是多个线程同时访问同一个资源,造成资源状态不一致2、事务的问题 ----- 一对多的问题 ----- 是一个线程进数据库,操作多条sql,其中,某条sql的失败,致使整个业务失去意义;3、数据库中事务的实现方式:------------------ service执行一个操作,要执行N条sql( 一条sql 是一...

2019-12-22 20:38:51 288

原创 分布式实战-分布式锁mysql与redis实现(二)

使用锁的目的多个外部线程同时来竞争使用同一资源时,会彼此影响,导致混乱锁的目的,将资源的使用做排它性处理,使同一时间,仅一个线程能访问资源并不是所有的资源,都无法同时服务多个线程 ------ 比如,无状态的资源无成员变量/成员变量不存在变化的类---- 就是无状态类 ----- 这种类是线程安全的有状态的对象,也不一定是不安全的 ---如果状态变化是原子的(即没...

2019-12-22 14:35:58 311

原创 分布式实战-缓存(一)

缓存---高并发首选策略缓存---追求目标指标: 最小内存---最大功用1、命中率2、绝对过期3、滑动过期比如session过期就是滑动过期策略。用户一直访问一直不会过期的,当超过设置的session timeout时间,缓冲就会丢失。缓存---常规代码用法/** * 编码实现redis缓存 *///@Service("provinces...

2019-12-22 12:05:48 397

原创 SpringBoot学习 自定义Starter(十一)

在学习SpringBoot的过程中,不管是集成redis还是RabbitMQ,甚至是前面集成mybatis已经学习了很多starter,这些starter都是springboot为我们提供的一些封装,这些starter能非常方便快捷的增加功能,并不需要很多配置,即使需要配置也就在application.properties稍微配置下就可以了。那么接下来就学习下怎么创建属于自己的starte...

2019-12-14 20:48:34 134

原创 SpringBoot学习 Actuator监控管理(十)

Actuator是spring boot的一个附加功能,可帮助你在应用程序生产环境时监视和管理应用程序。可以使用HTTP的各种请求来监管,审计,收集应用的运行情况.特别对于微服务管理十分有意义缺点:没有可视化界面(Spring cloud 还会用到这功能,就可以看到界面了)修改pom文件,添加依赖 <dependency> <group...

2019-12-14 18:24:05 123

原创 SpringBoot学习 集成RabbitMQ(九)

Windows安装RabbitMQ先安装Erlang下载地址:http://erlang.org/download/otp_win64_20.3.exeRabbitMQ Server 3.7.4下载地址https://bintray.com/rabbitmq/all/download_file?file_path=rabbitmq-server%2F3.7.4%2Fra...

2019-12-14 17:17:20 138

原创 消息中间件 -RabbitMQ 集成和实战 (三十)

与Spring集成pom文件 <!-- RabbitMQ --> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifa...

2019-12-10 20:14:29 137

原创 消息中间件 -RabbitMQ 控制队列,临时队列,永久队列 (二十九)

临时队列自动删除队列自动删除队列和普通队列在使用上没有什么区别,唯一的区别是,当消费者断开连接时,队列将会被删除。自动删除队列允许的消费者没有限制,也就是说当这个队列上最后一个消费者断开连接才会执行删除。自动删除队列只需要在声明队列时,设置属性auto-delete标识为true即可。系统声明的随机队列,缺省就是自动删除的。单消费者队列普通队列允许的消费者没有限制,多...

2019-12-08 21:56:00 4546

原创 消息中间件 -RabbitMQ 消息的拒绝死信交换器DLX (二十八)

RabbitMQ对AMQP规范的一个扩展。被投递消息被拒绝后的一个可选行为,往往用在对问题消息的诊断上。消息变成死信一般是以下几种情况:消息被拒绝,并且设置 requeue 参数为 false 消息过期 队列达到最大长度死信交换器仍然只是一个普通的交换器,创建时并没有特别要求和操作。在创建队列的时候,声明该交换器将用作保存被拒绝的消息即可,相关的参数是x-dead-letter...

2019-12-08 20:39:07 221

原创 消息中间件 -RabbitMQ 消息的拒绝Reject和Nack (二十七)

Reject和Nack消息确认可以让RabbitMQ知道消费者已经接受并处理完消息。但是如果消息本身或者消息的处理过程出现问题怎么办?需要一种机制,通知RabbitMQ,这个消息,我无法处理,请让别的消费者处理。这里就有两种机制,Reject和Nack。RejectReject在拒绝消息时,可以使用requeue标识,告诉RabbitMQ是否需要重新发送给别的消费者。不重新发送,...

2019-12-08 18:46:28 5759

原创 消息中间件 -RabbitMQ消费者中的事务丶可靠性和性能的权衡 (二十六)

消费者中的事务使用方法和生产者一致事务的实现主要是对信道(Channel)的设置,主要的方法有三个:channel.txSelect()声明启动事务模式; channel.txComment()提交事务; channel.txRollback()回滚事务;在发送消息之前,需要声明channel为事务模式,提交或者回滚事务即可。开启事务后,客户端和RabbitMQ之间的通讯交...

2019-12-08 18:19:25 424

原创 消息中间件 -RabbitMQ QoS预取模式 (二十五)

在确认消息被接收之前,消费者可以预先要求接收一定数量的消息,在处理完一定数量的消息后,批量进行确认。如果消费者应用程序在确认消息之前崩溃,则所有未确认的消息将被重新发送给其他消费者。所以这里存在着一定程度上的可靠性风险。这种机制一方面可以实现限速(将消息暂存到RabbitMQ内存中)的作用,一方面可以保证消息确认质量(比如确认了但是处理有异常的情况)。注意:消费确认模式必须是非...

2019-12-08 18:14:54 687 1

原创 消息中间件 -RabbitMQ消息的消费 (二十四)

消息的获得方式拉取Get属于一种轮询模型,发送一次get请求,获得一个消息。如果此时RabbitMQ中没有消息,会获得一个表示空的回复。总的来说,这种方式性能比较差,很明显,每获得一条消息,都要和RabbitMQ进行网络通信发出请求。而且对RabbitMQ来说,RabbitMQ无法进行任何优化,因为它永远不知道应用程序何时会发出请求。对我们实现者来说,要在一个循环里,不断去服务器get消...

2019-12-08 17:50:01 246

原创 消息中间件 - RabbitMQ备用交换器(二十三)

在第一次声明交换器时被指定,用来提供一种预先存在的交换器,如果主交换器无法路由消息,那么消息将被路由到这个新的备用交换器。如果发布消息时同时设置了mandatory会发生什么?如果主交换器无法路由消息,RabbitMQ并不会通知发布者,因为,向备用交换器发送消息,表示消息已经被路由了。注意,新的备用交换器就是普通的交换器,没有任何特殊的地方。使用备用交换器,向往常一样,声明Queue和备...

2019-12-08 17:31:47 273

原创 消息中间件 - RabbitMQ发送方确认模式(二十二)

事务事务的实现主要是对信道(Channel)的设置,主要的方法有三个:channel.txSelect()声明启动事务模式; channel.txComment()提交事务; channel.txRollback()回滚事务;在发送消息之前,需要声明channel为事务模式,提交或者回滚事务即可。开启事务后,客户端和RabbitMQ之间的通讯交互流程:客户端发送给服务器Tx...

2019-12-08 17:13:53 215

原创 SpringBoot学习 集成Redis(八)

修改pom文件,增加依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>在properties增加redis配置...

2019-12-07 22:05:47 82

原创 SpringBoot学习 热加载/部署 ,编译,打包(七)

热加载/部署热部署不会用在生产环境,但对于程序员开发的效率,还是有一定帮助的,所谓的热部署,就是在应用程序在不停止的情况下,实现新的部署spring-boot-devtoolsspring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动还要更快...

2019-12-07 21:57:23 244

原创 SpringBoot学习 日志集成(六)

java有许多的日志组件,比如 log4j,log4j2,logback还有java自生提供的Java Util Logging,其实在springboot中对这些组件都提供了支持,log4j,log4j2和logback都提供相应的组件支持。Logback在springboot中默认使用的日志工具是logback,不过在提及具体的日志工具之前要提一个名词,这个名词就是slf4j(Sim...

2019-12-07 21:29:18 184

原创 SpringBoot学习 集成Swagger2构建API文档(五)

Swagger2 的作用随项目自动生成强大RESTful API文档,减少工作量 API文档与代码整合在一起,便于同步更新API说明 页面测试功能来调试每个RESTful API修改pom文件,添加swagger2的相关依赖 <dependency> <groupId>io.springfox</groupI...

2019-12-07 19:01:23 138

原创 SpringBoot学习 JSP集成以及模板引擎(四)

JSP集成一般来说springboot不建议直接使用jsp页面,但不排除有些公司的项目依然使用jsp做前端界面。springboot内置的tomcat并没有集成对jsp的支持,也没有对EL表达式的支持,因此要使用jsp应该先把相关的依赖集成进来 <!--JavaServer Pages Standard Tag Library,JSP标准标签库--> ...

2019-12-07 18:53:30 197

原创 SpringBoot学习 事务以及全局异常处理等基本特性(三)

事务支持修改IUserService接口,增加一个新增batchAdd方法,在UserServiceImpl增加相应实现类,在实现类中故意产生一个被0整除得异常public interface IUserService { boolean login(String username,String passwd); boolean register(String us...

2019-12-07 18:40:32 376

原创 SpringBoot学习 SpringBoot快速入门(二)

可以继承spring-boot-starter-parent项目来获取合适的默认设置。想配置你的项目继承spring-boot-starter-parent只需要简单地设置parent为:<parent> <groupId>org.springframework.boot</groupId> <artifactId...

2019-12-07 17:52:19 146

原创 SpringBoot学习 介绍以及第一个springboot(一)

Spring Boot使开发独立的,产品级别的基于Spring的应用变得非常简单,你只需"just run"。 我们为Spring平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地开始。多数Spring Boot应用需要很少的Spring配置。你可以使用Spring Boot创建Java应用,并使用java -jar启动它或采用传统的war部署方式。解决的问题依赖太多了, ...

2019-12-05 21:22:23 116

原创 消息中间件 -硬件配置对Kafka性能的影响以及集群介绍(四)

磁盘吞吐量/磁盘容量磁盘吞吐量会影响生产者的性能。因为生产者的消息必须被提交到服务器保存,大多数的客户端都会一直等待,直到至少有一个服务器确认消息已经成功提交为止。也就是说,磁盘写入速度越快,生成消息的延迟就越低。磁盘容量的大小,则主要看需要保存的消息数量。如果每天收到1TB的数据,并保留7天,那么磁盘就需要7TB的数据。内存Kafka本身并不需要太大内存,内存则主要是影响消...

2019-12-04 21:20:24 918

原创 消息中间件 -Kafka相关配置(三)

Broker配置配置文件放在Kafka目录下的config目录中,主要是server.properties文件常规配置broker.id在单机时无需修改,但在集群下部署时往往需要修改。它是个每一个broker在集群中的唯一表示,要求是正数。当该服务器的IP地址发生改变时,broker.id没有变化,则不会影响consumers的消息情况listeners监听列表(...

2019-12-04 21:17:14 330

原创 消息中间件 -Kafka的安装、管理(二)

预备环境Kafka是Java生态圈下的一员,用Scala编写,运行在Java虚拟机上,所以安装运行和普通的Java程序并没有什么区别。安装Kafka官方说法,Java环境推荐Java8。Kafka需要Zookeeper保存集群的元数据信息和消费者信息。Kafka一般会自带Zookeeper,但是从稳定性考虑,应该使用单独的Zookeeper,而且构建Zookeeper集群。下载...

2019-12-04 21:05:55 103

原创 消息中间件 - Kafka基本概念 (一)

什么是Kafkakafka最初是LinkedIn的一个内部基础设施系统。最初开发的起因是,LinkedIn虽然有了数据库和其他系统可以用来存储数据,但是缺乏一个可以帮助处理持续数据流的组件。所以在设计理念上,开发者不想只是开发一个能够存储数据的系统,如关系数据库、Nosql数据库、搜索引擎等等,更希望把数据看成一个持续变化和不断增长的流,并基于这样的想法构建出一个数据系统,一个数据架构。...

2019-12-04 20:36:19 284 1

原创 Redis学习 集群下线,故障转移(十九)

请求路由重定向我们知道,在redis集群模式下,redis接收的任何键相关命令首先是计算这个键CRC值,通过CRC找到对应的槽位,再根据槽找到所对应的redis节点,如果该节点是本身,则直接处理键命令;如果不是,则回复键重定向到其它节点,这个过程叫做MOVED重定向故障转移:redis集群实现了高可用,当集群内少量节点出现故障时,通过故障转移可以保证集群正常对外提供服务。...

2019-12-03 21:43:50 749 3

原创 Redis学习 集群减缩(十八)

集群同时也支持节点下线掉下线的流程如下:流程说明:确定下线节点是否存在槽slot,如果有,需要先把槽迁移到其他节点,保证整个集群槽节点映射的完整性; 当下线的节点没有槽或本身是从节点时,就可以通知集群内其它节点(或者叫忘记节点),当下线节点被忘记后正常关闭。删除节点也分两种一种是主节点6382,一种是从节点6392。在从节点6392中,没有分配哈希槽,执行....

2019-12-03 21:08:52 106

原创 Redis学习 集群扩容(十七)

这也是分布式存储最常见的需求,当我们存储不够用时,要考虑扩容扩容步骤如下:准备好新节点加入集群,迁移槽和数据同目录下新增redis6382.conf、redis6392.conf启动两个新redis节点./redis-server clusterconf/redis6382.conf & (新主节点)./redis-server clustercon...

2019-12-03 21:05:30 113

原创 Redis学习 redis节点之间的通信(十六)

节点之间采用Gossip协议进行通信,Gossip协议就是指节点彼此之间不断通信交换信息当主从角色变化或新增节点,彼此通过ping/pong进行通信知道全部节点的最新状态并达到集群同步Gossip协议Gossip协议的主要职责就是信息交换,信息交换的载体就是节点之间彼此发送的Gossip消息,常用的Gossip消息有ping消息、pong消息、meet消息、fail消息...

2019-12-03 20:57:56 1202

原创 Redis学习 redis集群(手敲一遍)(十五)

RedisCluster是redis的分布式解决方案,在3.0版本后推出的方案,有效地解决了Redis分布式的需求,当遇到单机内存、并发等瓶颈时,可使用此方案来解决这些问题分布式数据库概念:1,分布式数据库把整个数据按分区规则映射到多个节点,即把数据划分到多个节点上,每个节点负责整体数据的一个子集比如我们库有900条用户数据,有3个redis节点,将900条分成3份,分别存入到3个r...

2019-12-03 20:48:49 149

原创 Redis学习 哨兵机制(十四)

为什么要哨兵机制?A,我们学习了redis的主从复制,但如果说主节点出现问题不能提供服务,需要人工重新把从节点设为主节点,还要通知我们的应用程序更新了主节点的地址,这种处理方式不是科学的,耗时费事B,同时主节点的写能力是单机的,能力能限C,而且主节点是单机的,存储能力也有限主从故障如何故障转移(不满足高可用)A,主节点(master)故障,从节点slave-1端执行 sl...

2019-12-01 20:48:09 324

原创 Redis学习 主从复制(十三)

主从复制 a,方式一、新增redis6380.conf, 加入 slaveof 192.168.42.111 6379, 在6379启动完后再启6380,完成配置; 如果主机设置了密码则:查找/masterauth 回车搜索masterauth <master-password>的下一行 masterauth 主机密码 如:m...

2019-12-01 17:46:35 118

原创 Redis学习 Redis持久化(十二)

redis持久化redis支持RDB和AOF两种持久化机制,持久化可以避免因进程退出而造成数据丢失;RDB持久化把当前进程数据生成快照(.rdb)文件保存到硬盘的过程,有手动触发和自动触发手动触发有save和bgsave两命令save命令:阻塞当前Redis,直到RDB持久化过程完成为止,若内存实例比较大会造成长时间阻塞,线上环境不建议用它...

2019-12-01 17:33:47 98

原创 Redis学习 发布与订阅(了解即可)(十一)

redis提供了“发布、订阅”模式的消息机制,其中消息订阅者与发布者不直接通信,发布者向指定的频道(channel)发布消息,订阅该频道的每个客户端都可以接收到消息redis主要提供发布消息、订阅频道、取消订阅以及按照模式订阅和取消订阅发布消息publish channel:test "hello world"订阅消息subscribe channel:test此时...

2019-12-01 16:35:17 104

原创 Redis学习 LUA语言与redis(十)

LUA脚本语言是C开发的,类似存储过程使用脚本的好处如下:•1.减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在redis服务器上完成。使用脚本,减少了网络往返时延。•2.原子操作:Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。•3.复用:客户端发送的脚本会永久存储在Redis中,意味着其他客户端可以复用这一脚本而不需要使用代码完...

2019-12-01 16:28:13 306

telnet-安装包.zip

telnet 安装包 安装命令: rpm -Uvh telnet-0.17-65.el7_8.x86_64.rpm

2020-10-23

virtualbox.zip,centeros7

centeros7,virtualbox,vagrant+virtualbox方式创建一个centeros7

2020-06-09

trang-2019.zip

java使用jaxb解析XML(含根据xml自动生成实体类),工具类。非常实用的小工具,欢迎大家下载

2019-10-15

空空如也

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

TA关注的人

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