正经的聊聊分布式架构中的 redis

本文探讨了Redis在分布式架构中的角色,包括作为接口幂等控制、分布式锁、管理分布式共享session和作为缓存中间件的解决方案。介绍了Redis的速度优势、内存存储、数据类型以及如何利用Redis实现接口幂等性,同时提到了缓存击穿、穿透和雪崩等问题的应对策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开篇思考

  1. Redis 为什么在系统中使用?解决了哪些问题?
  2. Redis 如何保证和数据库同步?
  3. Redis 缓存操作是在操作数据库前还是操作数据库后?

话还得从上次报税说起,耳边还回绕这残留的芬芳:“SX系统,这也不能点,那也不能用!”,
身为程序员的我听到总是百感交集,程序员背锅是免不了了。。。

上线至今都能用的系统,突然就不行了,为什么?问题就在稳定性和系统架构上,发现问题就要吸取经验和血的教训。
我也特别喜欢吐槽,我觉得正确的吐槽姿势有助于系统的良性发展,就像父母的爱强烈扎刺着程序员面临崩溃的心灵,流出的爱的液体浇灌给系统茁壮成长。

心态

系统稳定,快速,美如画谁都想追求,可是往往美好的东西后面代价也不小。
追求可靠,我们需要+集群部署,容错容灾,那么就需要更多的机器设施及其他附属服务。
追求快速,我们需要解决地域限制,全球部署战斗机,DNS 快速定位访问,软件层面缓存技术。

那么接下来我们就来扒一扒分布式系统架构中 Redis 的使用,进入正题,不扯蛋了。
让我们看看 Redis 给分布式系统带来哪些好处和问题的解决方案,看看这些代价是否值得。

Redis 简介

  1. 内存存储,速度极快
  2. key-value 存储结构
  3. 支持 string,list,set,zset,hash 类型,其实还有一些不常用的
  4. 基于 epoll 多路复用,串行执行效率高
  5. 可以持久化数据,遇到宕机可以快速恢复
  6. redis 支持主从模式、哨兵模式
  7. 使用场景丰富:热点数据缓存、临时会话存储、消息发布订阅、网页计数

上面的介绍中,我基本扒出了 redis 的主要特点,外衣都给你扒了,这么赤裸的诱惑你们都不要吗?觉得还是不够吸引吗?
那我们就继续来扒拉扒拉。。。

脱给你看

内存

Redis 都是通过计算机内存来存取的,不用多解释。它为什么快? JMM java 中的内存模型大家了解吧,java 中每个线程会有自己的内存,要想达成可见性,需要同步主内存,这一操作听起来
很简单,但其实里面数据被拷贝了多次。这里简单介绍下传统的磁盘到网络的数据拷贝流程:

  1. 磁盘到 read buffer, 快
  2. read buffer 到 user buffer ,此处很慢,上下文有切换
  3. user buffer 到 socket buffer ,快
  4. socket buffer 写入到网卡 buffer 发送,快

在这里插入图片描述

好家伙,不扒不知道,原来底层数据是这么传输的。Redis 为什么快呢,因为它官方只支持 linux 系统,而 Linux
本身还支持零拷贝技术,并且这里都是纯内存操作,所有的数据操作都非常快。那么究竟有多快呢,
一秒真男人:读 10 w/s;写 8w/s; 当然数据只能是小数据流量的。

零拷贝技术被广泛应用在 Java NIO,netty,kafka 等。

redis 实现系统的接口幂等控制

每个工程师都应该知道接口幂等的重要性,在分布式系统中,接口幂等的设计原则贯彻始终。 所谓接口幂等就是无论我在某个业务执行过程中调用多少次接口,得到的结果都应该和调用一次接口得到的结果一样。 因此我们知道查询、删除这些是天然幂等的,没有必要再做幂等性控制。 那么一般哪些接口需要实现幂等控制呢?redis 是起了什么作用?

  • 新增接口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值