如何使用 Redis 实现消息队列?
如何使用 Redis 实现消息队列? 一般使用 list 结构作为队列,rpush 生产消息,lpop 消费消息。当 lpop 没有消息的时候,要适当 sleep 一会再重试。 如果对方追问可不可以不用 sleep 呢?list 还有个指令叫 blpop ,在没有消息的时候,它会阻塞住直到消息到来。 如果对方追问能不能生产一次消费多次呢?使用 pub / sub 主题订阅者模式...
如何使用 Redis 实现消息队列? 一般使用 list 结构作为队列,rpush 生产消息,lpop 消费消息。当 lpop 没有消息的时候,要适当 sleep 一会再重试。 如果对方追问可不可以不用 sleep 呢?list 还有个指令叫 blpop ,在没有消息的时候,它会阻塞住直到消息到来。 如果对方追问能不能生产一次消费多次呢?使用 pub / sub 主题订阅者模式...
如何使用 Redis 实现分布式限流? 在 Spring Cloud Gateway 中,提供了 Redis 分布式限流器的实现,具体直接看艿艿写的 《Spring-Cloud-Gateway 源码解析 —— 过滤器 (4.10) 之 RequestRateLimiterGatewayFilterFactory 请求限流》 的 「5.3 Redis Lua 脚本」 部分。 另外,Redi...
如何使用 Redis 实现分布式锁? Redis 实现分布式锁,需要考虑如下几个方面: 1、正确的获得锁 set 指令附带 nx 参数,保证有且只有一个进程获得到。 2、正确的释放锁 使用 Lua 脚本,比对锁持有的是不是自己。如果是,则进行删除来释放。 3、超时的自动释放锁 set 指令附带 expire 参数,通过过期机制来实现超时释放。 4、未获得到锁的等待机制 sl...
详细,可以看看如下: 因为 Redis Sentinel 的内容很多,艿艿这里就不详细哔哔了。实际场景下,对于开发的面试,我们也不会特别问,毕竟更偏运维的内容。 《Redis 官方文档 —— Sentinel 高可用》 《Redis 开发与运维》 的「9. 哨兵」章节,更加详细完整。
在 Spring Cloud 中,目前使用的声明式调用组件,只有: spring-cloud-openfeign ,基于 Feign 实现。 如果熟悉 Dubbo 胖友的会知道,Dubbo 的 Service API 接口,也是一种声明式调用的提现。 艿艿:注意噢,Feign 并非 Netflix 团队开发的组件。所有基于 Netflix 组件都在 spring-cloud-n...
🦅 Java NIO Epoll BUG Java NIO Epoll 会导致 Selector 空轮询,最终导致 CPU 100% 。 官方声称在 JDK 1.6 版本的 update18 修复了该问题,但是直到 JDK 1.7 版本该问题仍旧存在,只不过该 BUG 发生概率降低了一些而已,它并没有得到根本性解决。 🦅 Netty 解决方案 对 Selector 的 select ...
分布式事务的实现主要有以下 6 种方案: XA 方案 TCC 方案 本地消息表 可靠消息最终一致性方案 最大努力通知方案 SAGA
数据库的 ACID 满足了数据库本地事务的基础,但是它无法满足分布式事务,这个时候衍生了 CAP 和 BASE 两个经典理论。 🦅 CAP 理论 CAP 定理,又被叫作布鲁尔定理。对于设计分布式系统来说(不仅仅是分布式事务)的架构师来说,CAP 就是你的入门理论。 C (一致性):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本) ...
强一致性:每一笔交易都保证事务一致 最终一致性 误区:认为 分布式事务 = Seata 分布式事务:将不同节点上的事务操作,提供操作原子性保证。同时成功或者同时失败。第一个要点:就是要在原本没有直接关联的事务之间建立联系1、Http连接:尽最大努力通知。– 事后补偿2、MQ:事务消息机制。3、Redis:opKey-> 事务A 开始时 opKey+1,事务B 开始时 opKey ...
分布式场景下,多个服务同时对服务一个流程,比如电商下单场景,需要支付服务进行支付、库存服务扣减库存、订单服务进行订单生成、物流服务更新物流信息等。如果某一个服务执行失败,或者网络不通引起的请求丢失,那么整个系统可能出现数据不一致的原因。 上述场景就是分布式一致性问题,追根到底,分布式一致性的根本原因在于数据的分布式操作,引起的本地事务无法保障数据的原子性引起。 分布式一致性问题的解决思路...