自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 Java8的新特性

函数式编程写出的代码简介且意图明确,比如stream可以告别for循环。

2024-04-24 21:27:31 154

原创 springdata框架对es集成

Spring Data是一个用于简化数据库、非关系型数据库、索引库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持 map-reduce框架和云计算数据服务。Spring Data可以极大的简化JPA(Elasticsearch…)的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD 外,还包括如分页、排序等一些常用的功能。

2024-03-28 23:48:43 1170 2

原创 ES 进阶知识

一个运行中的 Elasticsearch 实例称为一个节点,而集群是由一个或者多个拥有相同cluster.name 配置的节点组成, 它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。当一个节点被选举成为主节点时, 它将负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。而主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。任何节点都可以成为主节点。

2024-03-26 21:03:21 899

原创 Windows如何搭建 ElasticSearch 集群

单机 & 集群单台 Elasticsearch 服务器提供服务,往往都有最大的负载能力,超过这个阈值,服务器性能就会大大降低甚至不可用,所以生产环境中,一般都是运行在指定服务器集群中。除了负载能力,单点服务器也存在其他问题:单台机器存储容量有限单服务器容易出现单点故障,无法实现高可用单服务的并发处理能力有限配置服务器集群时,集群中节点数量没有限制,大于等于 2 个节点就可以看做是集群了。一般出于高性能及高可用方面来考虑集群中节点数量都是 3 个以上。

2024-03-25 22:29:47 1323

原创 如何用java使用es

可以看到返回的结果是相同的,创建时间,分片,副本,uuid,版本号,索引名字。局部修改数据返回结果:updated。删除后在kinbaba查询这个索引。java如何批量增加数据。

2024-03-22 22:17:16 592

原创 ElasticSearch 用法

这里 Types 的概念已经被逐渐弱化, Elasticsearch 6.X 中,一个 index 下已经只能包含一个type, Elasticsearch 7.X 中, Type 的概念已经被删除了。"_type" : "_doc", //类型。"_version" : 3, // 版本号是一直变化的。"_index" : "shopping", //索引。

2024-03-18 22:09:45 1064

原创 安装kibaba

elasticsearch.hosts:[http://127.0.0.1:9200] es的服务器地址。安装好了之后开始配置文件/kibana/config打开kibanba.yml。设置完成保存后进到bin目录下双击.kibana.bat。sercer.name:kibana 服务器名称。kibana.index:.kibana 索引。server.port:5601 服务器地址。i18.locale:zh-CN 中文。出现这种页码算成功了。

2024-03-14 22:17:06 457

原创 如何安装ES

Windows 版的 Elasticsearch 压缩包,解压即安装完毕,解压后的 Elasticsearch 的目录结构如下。9300端口为ElasticSearch集群见通信的端口,9200端口为浏览器访问的http协议resultful风格的端口。进到bin目录下,有一个ElasticSearch.bat文件直接双击打开。:分布式:resultfule风格的搜索和分析。下载玩ES进行解压,可以看下里面的结构。:以轻量化的方式收集,传输。:采集,转换,充实,输出。里面可以选择下载的系统。

2024-03-14 21:10:51 553

原创 Elasticseach基础认识

es是一款非常强大的的开源搜索引擎,可以帮我们从海量的数据中心找到需要的内容例:应用搜索,比如我们常见的 github,滴滴,美团,抖音,百度。elasticsearch 结合kibana,logstash,beats,也就是elastic stack(ELK)技术栈。被广泛应用在日志数据分析,实时监控等领域Kibana类似客户端,Elasticsearch就是查询搜索数据,logstash,beats就是收集的意思。

2024-03-13 22:06:22 412

原创 xpath基础入门

XPath 用于在 XML 文档中通过元素和属性进行导航。当然作为一名爬虫程序员,更多的还是会将XPath应用于Python爬虫中。支持 XML 的应用程序(例如 Web 浏览器)和许多编程语言都支持 XPath。语言基于XML 文档的树表示,并提供在树中导航、按各种标准选择节点的能力。是一种表达语言,旨在支持XML文档的查询或转换。由万维网联盟(W3C) 于 1999 年定义。定位 HTML 文档中的元素的工具。这是我写的html 结果。

2024-03-11 21:58:43 391

原创 爬虫案例二

为什么我使用gbk,因为print自身不支持gb2312,但是他支持gbk,因为gbk是gb2312的扩展,兼容gb2312。报错,这个一看就是证书的问题,所以我们需要让SSL证书失效。我们加了verify=False 意思是失效的意思。然后这时候还出现问题,这个问题是字符集的问题。至此拿到了页码源代码了。

2024-03-04 21:56:38 1124

原创 爬虫案例一

然后可以看到有返回的结果,如果想拿到其中的名字这时候就要用re正则来进行匹配。但是返回的结果是空,所以我们需要在头里面加上User-Agent。如果我们像吧他们存放去了,可以导入csv包只是方便分析而已。说明源代码有,说明是服务器渲染,可以直接那html。然后这是自己写的正则,可能写的不够好。这个电影,首先我们进去检查源代码。如果想拿到这3个信息,如何写呢。这是我写的re正则,看结果。首先我举一个案例比如。

2024-03-04 21:19:15 1187

原创 re模块的使用

正则表达式,又称规则表达式(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。Python中re模块主要功能是通过正则表达式是用来匹配处理字符串的(regex:正则)re.findall的用法。

2024-02-29 22:22:18 327

原创 Requests入门

1 Requests的定义Requests是python的一个第三方库,用户发送HTTP请求.Requests可用于爬取数据,与API 交互,测试Web服务等等2 Requests的作用Requests库的作用主要是向Web服务器发送请求,并获取响应结果。发送的请求可以是 GET、POST、PUT、DELETE、HEAD、OPTIONS等HTTP方法,同时还可以设置请求参 数、请求头、请求体、代理、超时时间等。

2024-02-26 21:07:46 667

原创 Web 请求过程剖析

当我们请求www.baidu.com的时候,这时候会请求到百度的服务器,然后百度会返回html格式给我们,但是当我们搜索百度的时候加上参数,比如加上周杰伦,这时候百度会携带传递过来的参数并进行检索并返回对应的html数据当我们请求douban.com网页的时候,服务器会返回一个html骨架,但是我们有时候会发现他返回的html没有我们想要的内容,这时候会在此请求服务器要数据,服务器会返回对应的数据,并和对应的html骨架进行结合,这就生成了页码这就是客户端渲染优点

2024-02-26 19:59:32 443 1

原创 手刃一个小爬虫

如果你直接用浏览器打开文件,浏览器会根据自己的默认编码方式来解析文件内容,并不会根据文件头部的编码声明来解码。所以当第二种方式生成的文件中内容的编码方式与浏览器的默认编码方式不一致时,就会导致乱码的显示。以二进制写入模式打开文件,并直接将返回的二进制数据写入文件时,文件中的内容是网页的原始字节数据,没有进行任何编码转换。将返回的二进制数据进行UTF-8解码转换为文本后,如果网页内容的编码方式与你指定的解码方式不一致,就会导致乱码的出现。以文本写入模式打开文件,并使用。然后点击进去会出现这个。

2024-02-21 21:12:44 373

原创 第十九章 MQ高级篇 延迟消息

生成者发送消息时指定一个时间,消费者不会立马去消费消息,而是在指定的时间后去消费消息。

2024-01-29 23:20:08 339

原创 第十八章 MQ高级篇 消费者的可靠性 业务幂等性

这样发送一次直接和数据库中进行对比,如果存在说明消费过,直接扔掉。可以看到携带了一个message_id,并保存到数据库中。然后到mq的控制台看一下,这条消息的头是否含有id。

2024-01-29 21:26:05 377

原创 第十七章 MQ高级篇 消费者可靠性---失败重试机制

如果我们发送者通过通过交换机发送给队列,然后消费者监听这个队列,但是这时候如果期间出现错误,导致重试机制出错,我们设置一个error.direct的交换机和error.queue队列。然后我们实现的是第三种,第三种需要传参,但是传参的是AmqpTemplate类型,但是我们一直使用的是rabbitTemplate,也可以传,因为他们是父子,当消费者出现异常后,消息会不断进行重新投递,然后消费者从新消费,然后再异常,在投递,会无限循环,导致mq的消息处理飙升,带来不必要的压力。可以看到他需要传递3个参数。

2024-01-26 01:02:10 811 1

原创 第十六章 MQ高级篇 消费者可靠性--消费者确认

这张图表示的含义:发送者发送消息到队列,消费者接受到消息返回ack,这时候会从队列中删除这条消息发送者发送消息到队列,消费者接受到消息返回nack,这时候会重新投递消息,并重新消费发送者发送消息到队列,消费者接受到消息返回reject,这时候会从队列中删除这条消息。

2024-01-23 21:53:54 382 1

原创 第十五章 MQ高级篇 Lazy Queue

之所以引用惰性队列,就是为了提高消息的堆积能力,传统的RabbitMQ的消息默认是存储在内存当中,当并发量高的时候,容易造成消息堆积,当占用内存百分之40时,MQ会暂时停止生产者的消息投递,将一部分消息保存在磁盘中,从到导致暂时的不可用状态,MQ的性能也就忽高忽低。而惰性队列是直接保存在磁盘当中,保证了MQ的稳定性,但损耗了性能。

2024-01-23 21:12:04 345 1

原创 第十四章 MQ高级篇 消息持久化

我们在simple.queue发送消息里面有2条消息 直接重启mq: docker restart mq。

2024-01-20 19:24:17 884

原创 第十三章 MQ高级篇 生产者确认机制

其实他有2中方式:1种是同步 1种是异步 同步是生产者把消息发送到mq,然后mq返回ack告诉生成者收到消息了,异步是生产者把消息发送到mq,然后接口处理其他事情,不用等待返回的ack。假如我们有3个mq的key配置错误,然后再回调的时候他会给这个uuid带上,能方便区别是那个uuid对应那个消息。我创建了CorrelationData然后给一个uuid他主要是在发送消息的时候,给消息一个唯一的id。而路由key错的话,他是能找到交换机,只是找不到这个交换机上绑定的key所以不会出现nack。

2024-01-20 18:05:16 329

原创 第十二章 MQ高级篇 生产者重连

我们可以看到initial-interval(失败后初始等待时间)是1000ms,max-attempts(最大重试次数)是3次 mutiplier(失败后下次等待时长倍数) 是1 所以不用设置,也可以自己设置 然后再linux中吧mq关掉。我这边是只开启了默认重试机制,没有设置失败后初始等待时间,失败后下次等待时长倍数,最大重试机制因为他有默认值。第二次 本来是23秒 重试加1秒 下次重试的规律是1*2所以变成了26秒。最后结果是 下次重试的时间是(2*n)+1。

2024-01-20 16:36:13 360

原创 第十一章 MQ高级篇

比如我们有一个支付模块,然后下单成功后修改支付模块的状态,同时告诉客户支付成功这里使用的是topic模式 为什么不用direct模式好处一:如果使用topic 当我的支付的回调中如果给我支付成功,我的路由key可以写成pay.success 这样2个模块都可以通知到,当在回调中失败,pay.error这样通知模块可以收到消息就可以通知到用户,或输入pay.wait 也可以通知客户,正在支付中,请等待好处二:这样我只需要创建一个创建机,2个队列,然后再创建2个路由进行绑定 ,

2024-01-17 21:57:58 313

原创 第十章 java客户端-声明队列和交换机的方式二

创建MyDirectTest2类,这时候他会自动创建队列,交换机,以及进行绑定。

2024-01-17 20:59:07 322

原创 第九章 RabbitMQ声明队列和交换机的方式一

队列是不分种类的但是交换机是分种类但是一般都用3种交换机 topicExchange fanoutExchange directExchange 三种交换机。

2024-01-15 21:53:42 405

原创 第八章 java客户端-Topic交换机

这种交换机和其他交换机不一样,他是更加灵活的交换机。比广播交换机 直连交换机更厉害、他有2中通配符我现在举个例子queue1 绑定的队列 ---------------------------------china.#queue2 绑定的队列 ---------------------------------japan.#queue3 绑定的队列 --------------------------------- #.weather。

2024-01-11 22:31:41 344

原创 第七章 java客户端 -Direct 交换机

举个例子,如果支付模块,支付成功后,需要对订单模块发送一个消息,修改订单状态然后再通知一下积分模块,给用户增加积分。我们可以这样 :设置1个直连交换机 然后创建2个路由 创建2个队列 然后用同一个交换机各自 绑定一个队列一个路由,然后再有积分模块,订单模块,各自监听一个队列我们在发送消息的时候只要携带者路由key,然后交换机他会自动验证发送者携带的key和我自 身绑定key是否一致。

2024-01-11 21:38:35 351

原创 第五章 RabbitMQ Fanout 交换机

一 交换机类型像之前的直接发队列那种方式是不行的,比如我举个例子就像支付一样,如果我支付成功,然后这时候就要通知订单模块,积分模块。订单模块修改订单状态,支付模块增加积分,像之前那个直接发送队列,比如订单模块消费后,积分模块是没法在此消费的,所有需要通过交换机来实现。二 Fanout交换机这种模式就相当于相当于广播模式,我发一条消息到这个交换机,然后他通过广播模块,发送到每一个队列,消费者监听其中一个队列,就能接受到消息java代码如何实现一 首先在控制台上创建2个队列

2024-01-10 21:57:21 377

原创 第四章 java客户端 -work模型

3.从系统的代码逻辑中获取对应的功能字符串,将消息任务扔到对应的队列中业务场景:error 通知;1.X代表交换机rabbitMQ内部组件,erlang 消息产生者是代码完成,代码的执行效率不高,消息产生者将消息放入交换机,交换机发布订阅把消息发送到所有消息队列中,对应消息队列的消费者拿到消息进行消费。1.消息生产者将消息发送给交换机按照路由判断,路由是字符串(info) 当前产生的消息携带路由字符(对象的方法),交换机根据路由的key,只能匹配上路由key对应的消息队列,对应的消费者才能消费消息;

2024-01-09 22:29:54 373

原创 第三章 快速入门RabbitMQ

rabbitmq的大致流程:生产者(publisher)------------交换机(exchange)-----------队列(queue)--------消费者(consumer)

2023-12-19 21:07:11 352

原创 第二节 RabbitMQ的同步调用

1 扩展性差 : 就是支付服务,本来有用户服务,交易服务。但是过了几天后有一个需求需要改变,就是需要增加通知服务,这时候就要对支付服务的代码进行修改,有过了几天又需要积分服务这时候也要对支付服务代码进行添加。导致支付代码冗余。改动频繁2 性能下降:因为是同步调用,支付服务会调用用户服务,等用户服务调用完成,调用支付服务,通知服务,积分服务 这样可能用户购买一个商品感觉特别慢。

2023-11-01 22:14:00 87

原创 第一节深入消息队列MQ

mq的介绍

2023-10-27 22:06:09 45

空空如也

空空如也

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

TA关注的人

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