- 博客(47)
- 资源 (3)
- 收藏
- 关注
原创 Elasticsearch 集群和分片使用
一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能;一个节点是集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。
2022-11-07 21:49:53
731
1
原创 Elasticsearch 入门
Elasticsearch 是一个非常强大的搜索引擎。它目前被广泛地使用于各个 IT 公司。Elasticsearch 是由 Elastic 公司创建。它的代码位于 GitHub - elastic/elasticsearch: Free and Open, Distributed, RESTful Search Engine。目前,Elasticsearch 是一个免费及开放(free and open)的项目。同时,Elastic 公司也拥有 Logstash 及 Kibana 开源项目。
2022-10-27 22:54:34
846
原创 Redisson 三种集群部署模式使用
Redis 常见四种部署模式:单机部署、主从模式部署、sentinel 部署模式、分片模式,针对不同场景一般选择不同的集群部署模式。而 redisson 单机部署针对不同的部署模式分别提供了不同的 API 以统一操作。
2022-09-22 23:06:54
5080
原创 MySQL 索引的使用和设计
如果进行更新的时候,更新的字段是非索引字段,提升的效率会更明显,这是因为非索引字段更新不需要对索引进行维护。索引就是让数据按照某种顺序进行存储或检索,因此当我们使用 GROUP BY 对数据进行分组查询,或者使用 ORDER BY 对数据进行排序的时候,就需要 对分组或者排序的字段进行索引。这样也可以较少的建立一些索引。需要对某个字段进行去重,使用 DISTINCT,那么对这个字段创建索引,也会提升查询效率。在数据量不大的情况下,索引就发挥不出作用了,但是却消耗了空间和降低增、删、改的效率。
2022-09-14 00:47:10
260
原创 MySQL 索引
索引是 帮助MySQL高效获取数据的数据结构。MySQL 数据存储硬盘不是连续存储,记录的存储单位是数据页,每次查询需对数据页的进行读取和加载,免不了 IO 操作,如果遍历全部页,那么意味着进行多次 IO 操作。索引通过实现了一套数据结构,记录了数据页和记录的关系,使得以更少的 IO 次数获取到目标数据页。此外,该数据结构对数据进行了预先排序,满足特定查找算法,可以更快的查询到数据页上的目标记录。因此,索引可以通过减少 IO 操作次数、使用更加快速的查找算法查找到目标记录。
2022-09-12 23:07:30
711
原创 MySQL 索引失效
所以尽量让主键具有 AUTO_INCREMENT ,让存储引擎自己为表生成主键,而不是手动插入 ,比如: person_info 表:我们自定义的主键列 id 拥有 AUTO_INCREMENT 属性,在插入记录时存储引擎会自动为我们填入自增的主键值。所以如果想尽量避免这样无谓的性能损耗,最好让插入的记录的主键值依次递增 ,这样就不会发生这样的性能损耗了。虽然建立了索引,但是该索引最左边的是 age,查询语句中不包含 age,根据最左前缀匹配特性,这时候索引失效。8、OR 前后存在非索引的列,索引失效。
2022-09-04 23:48:17
315
1
原创 Redis 持久化
AOF (Append Only File) 持久化默认是关闭的,通过将 redis.conf 中将 appendonly no,修改为 appendonly yes 来开启AOF 持久化功能,如果服务器开始了 AOF 持久化功能,服务器会优先使用 AOF 文件来还原数据库状态。如图所示,将 RDB 数据文件的内容和增量的 AOF 命令文件存在一起。:把内存数据以快照的形式保存到磁盘上,在指定的时间间隔内,执行指定次数的持久操作,将内存中的数据集快照写入磁盘中,它是 Redis 默认的持久化方式。...
2022-09-01 00:02:30
279
原创 缓存穿透、缓存击穿、缓存雪崩
在并发的多个请求中,只有第一个请求线程能拿到锁并执行数据库查询操作,其他的线程拿不到锁就阻塞等着,等到第一个线程将数据写入缓存后,直接走缓存。说明:大量的热点 key 设置了相同的过期时间,导在缓存在同一时刻全部失效,造成瞬时数据库请求量大、压力骤增,引起雪崩,甚至导致数据库被打挂。在并发的多个请求中,只有第一个请求线程能拿到锁并执行数据库查询操作,其他的线程拿不到锁就阻塞等着,等到第一个线程将数据写入缓存后,直接走缓存。如图:每次请求都经过3、4、5,每次都要操作数据库,也就是缓存无效了。...
2022-08-31 23:26:30
326
原创 EMQX 集群节点数据转发
emqx 分布式集群解决的问题时将客户端连接分到不同的节点上,从未获取到最大的连接数和并发量。 因此也带来了新的问题:订阅者和发布者不再同一个节点上,发布者的消息需要进行中转才能到达订阅者。emqx 设计了一套数据路由中转机制,其中主要使用了订阅表、路由表、主题树。三者搭配实现了数据的路由。.........
2022-08-30 00:21:35
906
原创 grep 使用
常见参数:-r : 递归查询目录下的所有文件;-n:显示行号;-v:排除关键字;-o:只输出匹配的字符串;-num:num为数值,输出匹配的上下num行;-i:忽略大小写。查找进程、 文件查找关键字、查找CPU占用最大进程、查找内存占用最大进程、查找磁盘占用最大文件...
2022-08-28 14:15:05
214
原创 MySQL 事务
MySQL 事务保证多个任务执行要不同时成功要不同时回滚。事务支持是在引擎层实现的,Mysql 的默认引擎 InnoDB 是支持事务的,MyISAM 是不支持事务的。事务特性 ACID原子性:一个事务包括多个任务,所有的任务要不全成功,要不全部失败回滚,不存在部分成功;一致性:如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态;如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态;隔离性:指在并发环境中,并发的事务是相互隔离的,每个事务都有各自完成的数据空
2022-08-28 14:00:41
284
原创 Netty-解码器
该解码器是四个解码器中相对来说稍显复杂一点,不是实现复杂,是因为以下两个方面的原因:一是参数较多,二是准确计算各参数的值。1.发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。2.发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。行解码器:使用换行符\n或者\r\n作为依据,遇到\n或者\r\n都认为是一条完整的消息。
2022-08-22 00:25:35
857
原创 Netty-自定义线程池处理长耗时业务
在Netty中,EventLoop 和 EventExecutorGroup 提供的普通任务不能解决长耗时业务处理引起的 I/O 线程阻塞问题,究其原因:在 Netty 中,一个 channel 在它的生命中期内只注册于一个 EventLoop,而一个 EventLoop 在它的生命周期内只和一个线程绑定,一个给定的 channel 的 I/O 操作都是由相同的线程进行处理。为此不能直接在该线程上进行长耗时业务处理。为了解决这个问题,通常的做法是:自定义线程池,把长耗时的业务都丢到线程池中去处理。
2022-08-22 00:16:42
1080
原创 图说 Netty 核心组件
Netty 功能非常强大,依赖于其团队对其高度抽象化和模块化,封装出各个组件,开发者只需要调用对应的组件便可以轻松构造出高性能服务。通常编写最简单高效的服务一般会涉及到如下组件:Channel、EventLoop、ChannelFuture:socket 管理、控制流、多线程、并发;ChannelHandler、ChannelPipeline:管理数据流和数据处理;ByteBuf:高效简单的数据读写缓存,数据读写容器;Encode、Decode:一套编解码框架;Bootstrap:配置服务参
2022-08-22 00:03:01
224
原创 认识 EMQX
EMQX 是基于发布订阅,一款大规模可弹性伸缩的 MQTT 消息服务器。EMQX 提供了高效可靠海量物联网设备连接,能够高性能实时移动与处理消息和事件流数据,帮助您快速构建关键业务的物联网平台与应用。
2022-08-21 14:00:59
2493
原创 EMQX 实现 阿里云一机一密 认证
EMQX 实现 阿里云一机一密 验证。设备接入物联网平台之前,需通过身份认证。目前,阿里云物联网平台支持使用设备密钥、ID²和X.509证书进行设备身份认证。
2022-08-20 23:32:08
2440
原创 JAVA类加载流程
类加载流程描述了类加载器把 class 文件加载到虚拟机的过程。class 文件像是一个模板,被加载到 JVM 之后,可以被复刻为多个实例。
2022-08-14 15:15:43
679
原创 JAVA 类加载器
在 java 中,类基于按需加载,所有的类都是使用类加载器进行加载,就是将 .class 文件加载到内存。JVM 中内置了三个类加载器,分别是:启动类加载器,扩展类加载器,应用类加载器。除了启动类加载器之外,其他的 JAVA 实现的类加载器都是继承 java.lang.ClassLoader。......
2022-08-08 10:58:33
237
原创 JAVA 浅拷贝和深拷贝
在 java 中,默认的拷贝指的是类重写 Object 类中的 clone 方法,调用该方法进行拷贝。使用 clone 方法生生成新的对象,此时在堆中产生新的对象,clone 存放了该对象的引用。对浅拷贝进行加强,对象中引用属性进行 clone 操作,以下例子 User 类 clone 的时候也对 animal 进行拷贝。深拷贝相对于浅拷贝而言,会对所有数据类型都进行拷贝一份,包括这个对象所包含的内部对象。User 类实现 Serializable 接口,对堆区中的实例进行读写,从而实现对实例的全部拷贝。.
2022-08-07 15:27:38
3703
1
原创 telegraf 安装使用说明
使用influxdbstudio连接influxdb,点击地址下载influxdbstudiohttps//github.com/CymaticLabs/InfluxDBStudio/releases/tag/v0.2.0-beta.1启动客户端连接。访问grafanahttp//10.1.253.1083000端口默认是3000,默认账号密码是admin/admin。查看influxdbstudio可以看到cpu和mem表,查询可以看到对应的数据已经存储。............
2022-07-29 00:00:56
2832
原创 idea 远程调试 springboot
出现一下日志说明已经连接成功,可以开始调试。填写Apply-->OK。出现如下日志说明对应端口已经监听。
2022-07-27 13:00:45
387
原创 消费端手动确认消费
一般情况下都会使用消息手动签收确认的方式来消费消费消息。这样可以最大可能保证消息被消费。此外,一般不推荐消费失败后将消息回退队列。因为消费失败再次接收该消息还是相同的结果。推荐记录日志或者入库后续追溯、人工介入处理。.........
2022-07-27 00:41:55
758
原创 消息可靠性投递
如图,该方案对消息进行落库处理,每次操作之后修改消息的状态。启动定时任务对消息库中的获取投递失败的消息,请求发送者重新投递消息。数据库中核心存储消息的唯一id,消息状态,重试次数,重试时间,主要的步骤如下step1发送消息前,存储消息至消息库;step2发送消息至MQBroker;step3生产者监听到MQ的确认消息;step4如果ack=true,更改数据库中消息的状态;step5定时任务(定时去获取数据库中消息状态为投递中状态,并且重试时间小于当前时间的消息)......
2022-07-24 22:44:17
663
原创 JAVA 线程状态
从源码出发,java.lang.Thread 定义了一个内部枚举 java.lang.Thread.State ,该枚举用于罗列 JAVA 线程的所有状态,分别是NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED。 NEW:新建状态,实例化后处于该状态( new Thread() ) 。 RUNNABLE:可执行状态,调用 start() 之后处于该状态 ,包括准备( Ready )和执行 ( Running )。 BLOCKED: 阻塞状
2022-07-13 11:44:00
107
原创 JAVA 线程基础
进程:程序在计算机上的一次执行过程,当运行一个程序,就启动了一个进程。凡是用于完成操作系统的各种功能的进程就是系统进程,而所有由用户启动的进程都是用户进程。运行一个JAVA程序会启动一个虚拟机进程,是计算机资源调用的最小单元。 线程:进程由一个或者多个线程组成,是独立运行于进程之中的子任务。是操作系统进行 CPU 调度的最小单位。可理解为线程是进程中的一个最小运行单元。JAVA 进程中做少有一个线程,为 main 线程。一个进程包含多个线程。 操作系统调度的最小任务单位其实不是进程,而是线程。线程通过抢占
2022-07-13 11:41:21
59
原创 Redis 分片集群搭建
主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:海量数据存储问题,单台服务的磁盘存储终究是有瓶颈;master 负责写操作,高并发写情况下,单台 master 终究是有瓶颈;使用分片集群可以解决上述问题,分片集群有以下特征:在同一台虚拟机中开启 6 个 redis 实例,模拟分片集群,信息如下:创建出7001、7002、7003、8001、8002、8003目录,作为节点存储目录。在 /root/tmp/redis-cluster 下准备一个新的redis.conf文件,内容如下:
2022-07-11 00:34:07
492
原创 Redis 哨兵模式
Redis 主从模式是一主多从,从节点宕机还有其他的备份,但是主节点宕机了,必然引起系统的故障。为了解决这个问题,Redis 提供了哨兵模式,监控主从模式中的所有节点,如果主节点宕机,会选举从节点重新成为主节点。使整个主从服务正常运行。Redis 提供了哨兵机制来实现主从集群的自动故障恢复。其主要起到的作用如下:Sentinel 基于心跳机制监测服务状态,每个一秒向集群中的每个实例发送 ping 命令。一旦发现主节点故障, sentinel 需要在从节点选择新的主节点,选择依据:当选中其中一个从节点为新
2022-07-06 00:30:32
1080
原创 Drools7 指定规则执行
在提交规则执行,如果不传参数,那么默认是将内存中的规则全部执行一遍。此外,也允许我们传递 AgendaFilter 参数。该参数是一个过滤器接口。允许使用者自行实现,Drools 也内置了几种过滤器
2022-07-03 12:14:46
564
原创 Drools7 动态更新规则
上一章节讲述了 Drools7 和 Springboot2 集成使用,集成规则相对简单、可以快速开发。但是缺点也很明显,规则和配置文件绑定在项目中(耦合度太高)。如果你不需要修改规则文件,这种方式还是可以采纳的。此篇讲述如何从数据库中加载规则文件,动态加载更新规则。Drools 中提供了 KieHelper ,可以动态添加规则,并且创建新的 kieContainer 返回。......
2022-07-03 00:17:42
2602
2
原创 Redis 主从数据同步
redis 从节点第一次连接主节点采用的是全量同步,包括两个阶段:第一阶段:第二阶段:全量同步过程有一个问题:主节点如何判断一个从节点是第一次同步数据?实际上每一个 redis 节点都会有一个 replication id ,称为数据集ID。从节点第一次请求主节点,会带上 replication id,主节点收到从节点 replication id,和自己的 replication id 对比,如果不相同说明是第一次请求同步数据,主节点将自己的 replication id 发送给从节点,从节点存储主节点
2022-07-01 00:07:44
2550
1
原创 简单工厂模式
在日常开发中,凡是需要生成复杂对象的地方,都可以尝试考虑使用工厂模式来代替。简单工厂模式有一个具体的工厂类,一个产品的抽象类或者接口,用来规范产品。将所有的具体产品的生产都罗列到工厂中。3. 扩展解读3.1. SpringBoot 项目中使用 简单工厂在实际项目中,我们通常使用 SpringBoot 进行开发,结合 IOC 机制也可以使用简单工厂达到简化产品生产,同时符合开闭原则。在这里,我们巧妙使用简单工厂和IOC思想,使用 getBea
2022-06-26 23:32:01
84
原创 建造者模式
建造者模式(Strategy): 指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。 策略模式的主要优点如下。 其主要缺点如下。 策略模式的主要角色如下。...
2022-06-26 23:26:08
80
原创 依赖倒置原则
“所以这里就出现了一连串的对象依赖,从而造成了严重的耦合灾难。解决这个问题的最好的办法就是,买卖双方都依赖于抽象——也就是货币——来进行交换,这样一来耦合度就大为降低了。”依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。其核心思想是:要面向接口编程,不要面向实现编程。依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。1.3. 总结从代码来看,Player 类是依赖类,属于高层模块,
2022-06-26 23:22:24
3246
原创 责任链模式
在现实生活中,一个事件需要经过多个对象处理是很常见的场景。例如,采购审批流程、请假流程等。公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这无疑增加了难度。那么有没有一种模式,只需要知道出发点,中间经过多少环节并不用用户关心,顺着流程就可以达到最终的结果。就好比搭高铁,只需要知道起点和终点即可,买票起点搭车到站下车,中间经过多少站点,每个站点停留了多久时间不用乘客关心,
2022-06-26 23:15:02
143
原创 Redis 主从模式搭建
Redis 提供了主从库模式,以保证数据安全和提高访问速度,主从库之间采用的是「读写分离」的方式。redis版本: redis 7.0.2系统版本:CentOS Linux release 7.9.2009 (Core)由于是在同一个服务器上模拟 redis 主从模式,所以节点的端口会发生冲突,需要修改。master 端口slave 端口slave 端口修改 ip 参数由于主机上的 IP 可能有多个,为避免混乱,为每个节点配置 IP。修改 bind 参数和 protected-mode 参数b
2022-06-26 11:38:04
763
原创 Redisson 加锁解锁源码
对于 redisson 分布式锁的使用很简单:1、调用 getLock 函数获取锁操作对象;2、调用 tryLock 函数进行加锁;3、调用 unlock 函数进行解锁;注意 unlock 操作需要放到 finally 代码段中,保证锁可以被释放。getLockgetLock 实例化 RedissonLock,相当于 Lock lock = new ReentrantLock() 操作;tryLock这里是一系列的调用,可以直接跳过,直接进入到 tryAcquireOnceAsync 函数,看
2022-06-25 16:21:23
1557
原创 Redisson 分布式锁使用
上一篇尝试了对分布式锁实现的思考,发现要实现一把分布式锁并不简单,好在 Redisson 实现了对于分布式锁的要求。本章主要介绍 Redisson 中分布式锁的使用。
2022-06-19 22:36:51
626
Drools7 + Springboot2 动态更新规则
2022-07-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人