一江溪水
11
13
RabbitMQ的死信队列 RabbitMQ的死信队列
什么是死信在 RabbitMQ 中充当主角的就是消息,在不同场景下,消息会有不同地表现。死信就是消息在特定场景下的一种表现形式,这些场景包括: 消息被拒绝访问,即 RabbitMQ返回 nack 的信号时 消息的 TTL 过期时 消息队列
2021-11-13
13
红黑树是什么 红黑树是什么
红黑树红黑树是一种接近平衡的二叉搜索树,它能够保证任意一个节点左右子树的高度差不会超过较低子树的高度,也就是两棵子树的高度比值不会超过 2 倍。这样我们可以使搜索的时间复杂度更接近 O (logN)。为了保证树的平衡,我们需要在添加或删除元
2021-11-13
07
select、poll和epoll的区别 select、poll和epoll的区别
进程所能打开的最大连接数select单个进程所能打开的最大连接数有FD_ SETSIZE宏定义, 其大小是32个整数的大小(在32位的机器上,大小就是3232,同理64位机器上FD_ SETSIZE为3264) tips:我们可以对进行修
2021-11-07
06
IO多路复用 IO多路复用
概述IO多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄 一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作; 没有文件句柄就绪时会阻塞应用程序,交出cpu; 多路是指网络连接,复用指的是同一个线程。 三种实现方式s
2021-11-06
03
分布式事务之两阶段提交 分布式事务之两阶段提交
两阶段提交协议 两阶段提交协议把分布式事务分为两个阶段,一个是准备阶段,另一个是提交阶段; 准备阶段和提交阶段都是由事务管理器发起的; 我们可以将事务管理器称为协调者,将资源管理器称为参与者。 流程准备阶段:协调者向参与者发起指令,参与者
02
分布式事务之三阶段提交 分布式事务之三阶段提交
三阶段提交协议是两阶段提交协议的改进版本,它通过超时机制解决了阻塞的问题,并且把两个阶段增加为三个阶段。 流程询问阶段协调者询问参与者是否可以完成指令,协调者只需要回答是或不是,而不需要做真正的操作,这个阶段超时会导致中止。 准备阶段 如果
10
30
RabbitMQ 如何保证消息不会被重复消费 RabbitMQ 如何保证消息不会被重复消费
所有的消息队列都要保证同一条消息不会被重复消费 举个例子:假设有个系统,消费一条往数据库里插入一条,要是你一个消息重复两次,你不就插入了两条,这数据就错了 所以消费到第二次的时候,自己判断一下已经消费过了,直接扔了,就保留了一条数据 一
2021-10-30
29
RabbitMQ如何保证消息顺序消费 RabbitMQ如何保证消息顺序消费
为什么要顺序消费保证消息的顺序消费是生产业务场景下经常面临的挑战,例如电商的下单逻辑,在用户下单之后,会发送创建订单和扣减库存的消息,我们需要保证扣减库存在创建订单之后执行。 处理业务逻辑后,向MQ发送一条消息,再由消费者从 MQ 中获取
2021-10-29
13
TCP的粘包和拆包 TCP的粘包和拆包
什么是粘包和拆包一个完整的业务数据包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这个就是TCP的拆包和粘包问题。 第一种情况(正常)接收端正常收到两个数据包,即没有发生拆包和粘包的现象; 第二种情况接
12
基于RedLock的分布式锁 基于RedLock的分布式锁
概述在单个主节点的架构上实现分布式锁,是无法保证高可用的,在生产环境上,我们的Redis都是以集群部署的; 那么如果Redis实现分布式锁的是一个主从集群,可能会发生什么情况呢? 如果进程A在主节点上加锁成功,然后这个主节点宕机了,则从节
2021-10-12
10
Redis实现分布式锁 Redis实现分布式锁
什么是分布式锁分布式锁其实可以理解为:控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性 为什么要分布式锁当多个线程需要并发修改一个数据时,为了避免竞争,在单机的情况下,加synchronized或者Lock即可实现互斥 但在分
2021-10-10
07
MySQL的执行计划(三) MySQL的执行计划(三)
书接上回 MySQL的执行计划(二) 执行计划中的列possible_keys显示在查询中使用了哪些索引 key 实际使用的索引,如果为NULL,则没有使用索引; 查询中如果使用了覆盖索引,则该索引仅出现在key列中。 possible_k
2021-10-07
2 / 7