自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

爱晴禹

当你发现自己的能力撑不起野心时,就请安静下来学习吧!选择没有对错。你做出选择,然后把选择变成正确的。

  • 博客(30)
  • 收藏
  • 关注

原创 RocketMQ底层原理及性能调优实战(二)

系统级的TraceTopic在默认情况下,消息轨迹数据是存储于系统级的TraceTopic中(其名称为:RMQ_SYS_TRACE_TOPIC,队列个数为1)。该Topic在Broker节点启动时,会自动创建出来(如上所叙,需要在Broker端的配置文件中将traceTopicEnable的开关变量设置为true)。用户自定义的TraceTopic。

2024-04-13 11:52:57 1070

原创 RocketMQ底层原理及性能调优实战(一)

延时消息:Producer 将消息发送到消息队列 RocketMQ 服务端,但并不期望这条消息立马投递,而是延迟一定时间后才投递到 Consumer 进行消费,该消息即延时消息。零拷贝(英语: Zero-copy) 技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽。零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效地提高数据传输效率。

2024-04-13 09:45:16 1682

原创 SpringCloud之Seata的源码分析

key1:事务回滚,先通过全局事xid找到全局事务和分支事务 1.先通过全局事务XID找到去global_table查询到全局事务对象 2.通过查询出来的xid对象去查询branch_talbe是否有分支事务,最后将这两个事务对象封装到GlobalSession中 这里传入的true代表全局事务和分支事务都查询出来,全局事务是一条数据,分支事务可能会多条是一个list。根据删除的分支事务的undolog的状态来处理,处理分支事务的数据和分支事务锁。

2024-02-01 21:39:10 1779 1

原创 SpringCloud之Seata的使用

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。概念:Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。AT模式:提供无侵入自动补偿的事务模式XA模式:支持已实现XA接口的数据库的XA模式TCC模式:TCC则可以理解为在应用层面的2PC,是需要我们编写业务逻辑来实现。SAGA模式。

2024-02-01 20:44:19 2553 1

原创 SpringCloud之Nacos2.X作为配置中心

官方文档:Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。

2024-01-07 10:45:51 1445

原创 SpringCloud之Nacos2.X作为注册中心

找入口的方式:自动装配类 spring.factories事件驱动:NacosAutoServiceRegistration实现了applicationListener接口判断变量 1、 debug 2、 全文搜索 定位赋值位置通过ephemeral的值判断是grpc通信,还是http通信,通过这我们能判断ap模式是用的grpc模式,cp模式是用http通信。

2023-12-11 22:11:23 495

原创 SpringCloud之Gateway的使用

网关作为流量的入口,常用的功能包括路由转发,权限校验,限流等。Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul。相比 Zuul 来说,Spring Cloud Gateway 提供更优秀的性能,更强大的有功能。Spring Cloud Gateway 是由 WebFlux + Netty + Reactor 实现的响应式的 API 网关。它不能在传统的 servlet 容器中工作,也不能构建成 war 包。

2023-11-30 20:57:08 310

原创 SpringCloud之Sentinel的使用

Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。丰富的应用场景:Sentinel承接了阿里巴巴近 10 年的双十一大促流量的核心场景, 例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控:Sentinel提供了实时的监控功能。

2023-11-12 18:44:08 392

原创 SpringCloud之OpenFeign的使用

Feign是Netflix开源的声明式HTTP客户端feign默认是不打印任何日志的,但是如果想要打印一些日志信息。比如调用的时间。级别打印日志内容NONE(默认值)不记录任何日志BASIC仅记录请求方法、URL、响应状态代码以及执行时间HEADERS记录BASIC级别的基础上,记录请求和响应的headerFULL记录请求和响应的header、body和元数据让父子上下文ComponentScan重叠(强烈不建议使用)/*** 日志级别。

2023-11-04 16:39:30 631

原创 SpringCloud之Ribbon与Loadbalance的使用以及原理

现在有三个实例,内容中心可以通过discoveryClient 获取到用户中心的实例信息,如果我们再订单中心写一个负载均衡 的规则计算请求那个实例,交给restTemplate进行请求,这样也可以实现负载均衡,这个算法里面,负载均衡是有订单中心提供的,而订单中心相对于用户中心是一个客户端,所以这种方式又称为客户端负负载均衡。并且进行负载均衡算法,进行请求。ribbon默认是懒加载的,只有第一层调用的时候才会生成userCenter 的 ribbonClient,这就会导致首次调用的会很慢的问题。

2023-10-19 21:58:18 1997

原创 SpringCloud之Nacos作为配置中心

这个也是在之前的图中讲到,它是将客户端每次请求都会放到这个quene里面,放到这里面就是,当页面或者通过api调用修改了配置,修改配置之后会发送一个消息,订阅消息一端就会遍历这个allSubs队列当中,看看这个队列里面请求的配置发生了变化,如果发生变化的配置和请求的客户端监听的配置匹配上之后,就会立即将变更的内容发挥给客户端。这里面的代码就是将客户端请求,进行个返回,那返回之前它会干什么,它会进行比较, 它会比较我们监听的配置和我们本身的配置是否发生了变化。它的执行的代码在它的run当中。

2023-10-19 21:34:42 633 1

原创 SpringCloud之Nacos作为注册中心

Spring Cloud是一系列框架的有序集合,这些框架为我们提供了分布式系统构建工具。

2023-10-15 16:27:57 459 1

原创 Redis的设计与实现(进阶篇)

如果开启多线程,至少要4核的机器,且Redis实例已经占用相当大的CPU耗时的时候才建议采用,否则使用多线程没有意义。Redis不能这样,因为每一次获取系统时间戳都是一次系统调用,系统调用相对来说是比较费时间的,作为单线程的Redis承受不起,所以它需要对时间进行缓存,由一个定时任务,每毫秒更新一次时间缓存,获取时间都是从缓存中直接拿。Redis在处理客户端的请求时,包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理,这就是所谓的“单线程”。

2023-09-28 20:44:50 843

原创 Redis与缓存(进阶篇)

bigkey是指key对应的value所占的内存空间比较大,例如一个字符串类型的value可以最大存到512MB,一个列表类型的value最多可以存储23-1个元素。如果按照数据结构来细分的话,一般分为字符串类型bigkey和非字符串类型bigkey。字符串类型:体现在单个value值很大,一般认为超过10KB就是bigkey,但这个值和具体的OPS相关。非字符串类型:哈希、列表、集合、有序集合,体现在元素个数过多。bigkey无论是空间复杂度和时间复杂度都不太友好,下面我们将介绍它的危害。

2023-09-23 20:34:03 729 1

原创 Redis集群(进阶篇)

Redis Cluster是Redis的分布式解决方案,在3.0版本正式推出,有效地解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方案达到负载均衡的目的。现在官方为我们提供了专有的集群方案:Redis Cluster,它非常优雅地解决了Redis集群方面的问题,因此理解应用好 Redis Cluster将极大地解放我们使用分布式Redis 的工作量。

2023-09-20 21:59:13 880 1

原创 Redis的Sentinel哨兵机制(进阶篇)

当Sentinel主观下线的节点是主节点时,该Sentinel节点会通过sentinel is-master-down-by-addr命令向其他Sentinel节点询问对主节点的判断,当超过<quorum>个数,Sentinel节点认为主节点确实有问题,这时该Sentinel节点会做出客观下线的决定,这样客观下线的含义是比较明显了,也就是大部分Sentinel节点都对主节点的下线做了同意的判定,那么这个判定就是客观的。从字面意思也可以很容易看出主观下线是当前Sentinel节点的一家之言,存在误判的可能。

2023-09-11 22:01:55 324

原创 Redis的主从复制(进阶篇)

由于复制只能从主节点到从节点,对于从节点的任何修改主节点都无法感知,修改从节点会造成主从数据不一致。5)、对于从节点开始接收RDB快照到接收完成期间,主节点仍然响应读写命令,因此主节点会把这期间写命令数据保存在复制客户端缓冲区内,当从节点加载完RDB文件后,主节点再把缓冲区内的数据发送给从节点,保证主从之间数据一致性。4)、主节点发送RDB文件给从节点,从节点把接收的RDB文件保存在本地并直接作为从节点的数据文件,接收完RDB后从节点打印相关日志,可以在日志中查看主节点发送的数据量。

2023-09-06 22:02:40 467 1

原创 Redis与分布式锁(进阶篇)

Redlock 只有建立在「时钟正确」的前提下,才能正常工作,如果你可以保证这个前提,那么可以拿来使用。从硬件角度来说,时钟发生偏移是时有发生,无法避免。例如,CPU 温度、机器负载、芯片材料都是有可能导致时钟发生偏移的。人为错误也是很难完全避免的。所以,Redlock尽量不用它,而且它的性能不如单机版 Redis,部署成本也高。优先考虑使用主从+ 哨兵的模式 实现分布式锁。

2023-09-02 18:00:03 305

原创 Redis的持久化(进阶篇)

Redis虽然是个内存数据库,但是Redis支持RDB和AOF两种持久化机制,将数据写往磁盘,可以有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。

2023-08-30 21:03:50 543 1

原创 Redis的Key和Value的数据结构组织(进阶篇)

为了实现从键到值的快速访问,Redis 使用了一个哈希表来保存所有键值对。一个哈希表,其实就是一个数组,数组的每个元素称为一个哈希桶。所以,我们常说,一个哈希表是由多个哈希桶组成的,每个哈希桶中保存了键值对数据。key和。

2023-08-20 18:25:18 360 1

原创 Redis的发布、订阅、Stream(进阶篇)

足够简单,消费消息延迟几乎为零,但是需要处理空闲连接的问题。如果线程一直阻塞在那里,Redis客户端的连接就成了闲置连接,闲置过久,服务器一般会主动断开连接,减少闲置资源占用,这个时候blpop和brpop或抛出异常,所以在编写客户端消费者的时候要小心,如果捕获到异常,还有重试。做消费者确认ACK麻烦,不能保证消费者消费消息后是否成功处理的问题(宕机或处理异常等),通常需要维护一个Pending列表,保证消息处理确认;不能做广播模式,如pub/sub,消息发布/订阅模型;

2023-08-20 18:21:17 2294 1

原创 Redis与Lua脚本(进阶篇)

Lua语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式程序移植到其他应用程序,它是由C语言实现的,虽然简单小巧但是功能强大,所以许多应用都选用它作为脚本语言,尤其是在游戏领域,暴雪公司的“魔兽世界”,“愤怒的小鸟”,Nginx将Lua语言作为扩展。Redis将Lua作为脚本语言可帮助开发者定制自己的Redis命令。Redis 2.6 版本通过内嵌支持 Lua 环境。也就是说一般的运用,是不需要单独安装Lua的。1、减少网络开销,在Lua脚本中可以把多个命令放在同一个脚本中运行;

2023-08-17 20:21:02 4078 1

原创 Redis的Pipeline和事务(进阶篇)

前面我们已经说过,Redis客户端执行一条命令分为如下4个部分1)发送命令2)命令排队3)命令执行4)返回结果使用Pipeline 执行了n次命令,整个过程需要1次RTT。Pipeline并不是什么新的技术或机制,很多技术上都使用过。而且RTT在不同网络环境下会有不同,例如同机房和同机器会比较快,跨机房跨地区会比较慢。redis-cli的--pipe选项实际上就是使用Pipeline机制,但绝对部分情况下,我们使用Java语言的Redis客户端中的Pipeline会更多一点。运行结果。

2023-08-13 13:09:00 1065 1

原创 Redis慢查询(进阶篇)

许多存储系统(例如 MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis也提供了类似的功能。Redis客户端执行一条命令分为如下4个部分:1、发送命令 2、命令排队 3、命令执行 4、返回结果需要注意,慢查询只统计步骤3的时间,所以没有慢查询并不代表客户端没有超时问题。

2023-08-12 12:25:33 255 1

原创 Redis基础数据类型之 ZSet (基础篇)

有序集合比较典型的使用场景就是排行榜系统。例如视频网站需要对用户上传的视频做排行榜,榜单的维度可能是多个方面的:按照时间、按照播放数量、按照获得的赞数。

2023-08-02 22:27:17 612

原创 Redis基础数据类型之 Set (基础篇)

集合( set)类型也是用来保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素。一个集合最多可以存储2的32次方-1个元素。Redis除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集,合理地使用好集合类型,能在实际开发中解决很多实际问题。

2023-08-01 22:17:04 248 1

原创 Redis基础数据类型之 List (基础篇)

列表( list)类型是用来存储多个有序的字符串,a、b、c、c、b四个元素从左到右组成了一个有序的列表,列表中的每个字符串称为元素(element),一个列表最多可以存储(2^32-1)个元素(4294967295在Redis 中,可以对列表两端插入( push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,在实际开发上有很多应用场景。

2023-07-31 23:25:11 143 1

原创 Redis基础数据类型之 Hash (基础篇)

在使用hgetall时,如果哈希元素个数比较多,会存在阻塞Redis的可能。如果只需要获取部分field,可以使用hmget,如果一定要获取全部field-value,可以使用hscan命令,该命令会渐进式遍历哈希类型。从前面的操作可以看出,String和Hash的操作非常类似,那为什么要弄一个hash出来存储。需要一条条去插入获取。

2023-07-30 22:20:49 644 1

原创 Redis基础数据类型之 String (基础篇)

查看所有键(支持通配符)但是这个命令请慎用,因为keys命令要把所有的key-value对全部拉出去,如果生产环境的键值对特别多的话,会对Redis的性能有很大的影响,推荐使用dbsize。keys命令会遍历所有键,所以它的时间复杂度是o(n),当Redis保存了大量键时线上环境禁止使用keys命令。dbsize命令会返回当前数据库中键的总数。

2023-07-30 21:14:26 85 1

原创 Redis入门与应用

1.缓存缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加快数据的访问速度,而且能够有效地降低后端数据源的压力。Redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。可以这么说,一个合理的缓存设计能够为一个网站的稳定保驾护航。一般MySQL数据库写的并发是600/s,读的2000/s,对于大型互联网项目的百万并发,根本扛不住,Redis的官方显示Redis能够单台达到10W+/s的并发。2.排行榜系统。

2023-07-30 15:53:07 104 1

空空如也

空空如也

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

TA关注的人

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