一江溪水
RabbitMQ如何保证消息顺序消费 RabbitMQ如何保证消息顺序消费
为什么要顺序消费保证消息的顺序消费是生产业务场景下经常面临的挑战,例如电商的下单逻辑,在用户下单之后,会发送创建订单和扣减库存的消息,我们需要保证扣减库存在创建订单之后执行。 处理业务逻辑后,向MQ发送一条消息,再由消费者从 MQ 中获取
2021-10-29
TCP的粘包和拆包 TCP的粘包和拆包
什么是粘包和拆包一个完整的业务数据包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这个就是TCP的拆包和粘包问题。 第一种情况(正常)接收端正常收到两个数据包,即没有发生拆包和粘包的现象; 第二种情况接
基于RedLock的分布式锁 基于RedLock的分布式锁
概述在单个主节点的架构上实现分布式锁,是无法保证高可用的,在生产环境上,我们的Redis都是以集群部署的; 那么如果Redis实现分布式锁的是一个主从集群,可能会发生什么情况呢? 如果进程A在主节点上加锁成功,然后这个主节点宕机了,则从节
2021-10-12
Redis实现分布式锁 Redis实现分布式锁
什么是分布式锁分布式锁其实可以理解为:控制分布式系统有序的去对共享资源进行操作,通过互斥来保持一致性 为什么要分布式锁当多个线程需要并发修改一个数据时,为了避免竞争,在单机的情况下,加synchronized或者Lock即可实现互斥 但在分
2021-10-10
MySQL的执行计划(三) MySQL的执行计划(三)
书接上回 MySQL的执行计划(二) 执行计划中的列possible_keys显示在查询中使用了哪些索引 key 实际使用的索引,如果为NULL,则没有使用索引; 查询中如果使用了覆盖索引,则该索引仅出现在key列中。 possible_k
2021-10-07
Redis-有序集合的数据结构 Redis-有序集合的数据结构
集合概念SetSet类似于Java中的HashSet 。Redis中的set类型是一种无序集合,集合中的元素没有先后顺序,并且不可重复。 当需要存储一个列表数据,又不不能出现重复数据时,Set 是一个很好的选择,并且set提供了判断某个成员
2021-10-06
MySQL的执行计划(二) MySQL的执行计划(二)
书接上回:MySQL执行计划(一) 执行计划中的列typetype列指代访问类型,是MySQL决定如何查找表中的行。 是SQL查询优化中一个很重要的指标,拥有很多值,依次从最差到最优: ALL全表扫描,性能最差,在写SQL时尽量避免此种情况
2021-10-06
MySQL的执行计划(一) MySQL的执行计划(一)
什么是执行计划执行计划,就是一条SQL语句,在数据库中实际执行的时候,一步步的分别都做了什么事情 EXPLAIN命令是查看查询优化器是如何决定执行查询的主要方法,从它的查询结果中我们可以知道: 一个SQL语句每一步是如何执行的; 都做了哪
2021-10-05
MySQL的日志文件 MySQL的日志文件
二进制日志-binlog二进制日志-binlog,它是 MySQL 重要的日志模块,在 Server 层实现 binlog 以二进制形式,将所有修改数据的 query 记录到日志文件中,包括: query 语句 执行时间 相关事务信息
2021-10-04
Java的IO流 Java的IO流
基本概念同步和异步同步和异步是通信机制 同步:同步IO是用户线程发起IO请求后需要等待或轮询内核IO操作完成后才能继续执行。 异步:异步IO是用户线程发起IO请求后可以继续执行,当内核IO操作完成后会通知用户线程,或调用用户线程注册的回调
2021-10-03
Spring Bean的作用域和生命周期 Spring Bean的作用域和生命周期
Spring Bean的作用域Spring 为Bean定义了5种作用域,分别为: singleton (单例) prototype (原型) request session global session singleton-单例模式(
2021-10-02
限流算法有哪些? 限流算法有哪些?
在开发高并发系统时,有三把利器用来保护系统: 缓存 降级 限流 那么何为限流呢?顾名思义,限流就是限制流量,那又有那些限流算法呢? 计数器算法计数器限流算法,是指在指定的时间周期内累加访问次数,达到设定的需值时,触发限流策略。下一个时间
5 / 10