从分布式架构演进,彻底搞懂Redis:初学入门全指南
·
redis系列
文章目录
前言
Redis 是在内存中存储数据的主要应用与分布式系统,解决进程间隔离问题,基于网络采用进程间通讯同步不同进程间的数据。
Mysql 访问速度较慢,数据存储在硬盘,Redis 数据存储在内存。
一、先搞懂:为什么我们需要Redis?
1.1 从单机架构到分布式系统的痛点
最早期的网站都是单机架构:一台服务器同时承载应用服务(用户、商品、交易等业务逻辑)和数据库服务(MySQL存储数据)。
- 优点:架构简单、开发运维成本低,绝大多数中小公司初期都用这种架构。
- 致命问题:单机硬件资源有上限(CPU、内存、硬盘、网络),当业务爆发、用户量和数据量暴涨时,单机会彻底扛不住。
当单机性能到顶后,我们有两个优化方向:
- 纵向扩展:给单台机器加硬件(加CPU、内存、换SSD硬盘),但受限于主板扩展能力,终究有上限。
- 软件优化:性能调优、代码优化,对技术水平要求极高,不是长久之计。
当纵向扩展也无法满足需求时,我们必须引入分布式系统:用多台机器分担压力,但分布式会带来系统复杂度飙升、bug概率提升、数据一致性等一系列问题。
1.2 分布式架构的演进与Redis的登场
分布式架构的第一步,是应用服务和数据库服务分离:
- 应用服务器:承载业务逻辑,消耗CPU和内存,可横向扩展。
- 存储服务器:承载数据库,消耗硬盘IO,可配置高性能存储。
第二步,为了应对更高的并发,我们会引入多台应用服务器+负载均衡:
- 负载均衡(Load Balance)把用户请求均匀分配给多个应用服务器,解决单台应用服务器性能瓶颈。
但此时问题来了:存储服务器的压力会越来越大!
- 实际业务中,读请求的频率远高于写请求(比如电商商品详情页,99%是读操作)。
- 数据库(MySQL)的天然痛点就是访问速度慢,哪怕做了读写分离、主从复制,面对海量读请求依然会成为系统瓶颈。
这时候,Redis就登场了!
- Redis是基于内存的存储,访问速度比硬盘数据库快几个数量级。
- 我们可以把**热点数据(20%的数据支撑80%的访问量,二八原则)**放到Redis缓存中,让绝大多数读请求直接命中Redis,彻底减轻数据库压力,这就是Redis最核心的使用场景之一:缓存。
二、Redis到底是什么?
Redis(REmote DIctionary Server)是一个开源的、基于内存的键值对(key-value)NoSQL数据库,同时也可作为缓存、流引擎、消息中间件使用。
2.1 Redis的核心特性(8大核心优势)
Redis能成为行业标配,核心源于这8个特性:
| 特性 | 核心说明 |
|---|---|
| 速度极快 | 1. 全量数据存内存,内存访问速度远快于硬盘 2. 单线程模型(6.0+多线程仅处理网络IO,命令执行仍单线程),无线程竞争开销 3. IO多路复用(epoll),单线程管理海量socket 4. C语言开发,代码精简高效 |
| 丰富的数据结构 | 支持string、hash、list、set、zset,以及Bitmaps、HyperLogLog、GEO、Stream等,覆盖绝大多数业务场景 |
| 功能丰富 | 支持键过期、发布订阅、Lua脚本、事务、Pipeline流水线、持久化等,可实现缓存、消息队列、计数器等多种功能 |
| 简单稳定 | 源码量少(早期2万行,3.0+集群版5万行),单线程模型简单易维护,不依赖第三方类库,自身实现事件处理,极少出现宕机BUG |
| 多语言客户端 | 基于简单TCP协议,支持C/C++、Java、Python、Go、PHP等几乎所有主流编程语言 |
| 持久化 | 提供RDB(快照)和AOF(日志)两种持久化方式,将内存数据落地硬盘,防止断电丢失 |
| 主从复制 | 支持一主多从架构,实现多副本,是分布式Redis的基础 |
| 高可用与分布式 | 提供Redis Sentinel(哨兵)实现故障自动转移,Redis Cluster实现真正的分布式集群,支持高可用、大容量扩展 |
三、Redis为什么这么快?(核心原理拆解)
3.1 核心原因1:全内存存储
这是Redis快的最根本原因。
- Redis把所有数据都放在内存中,而MySQL数据存在硬盘,哪怕加了缓存,也无法和全内存的Redis相比。
3.2 核心原因2:单线程模型(6.0+多线程优化)
- 传统认知里“多线程比单线程快”,但这个结论的前提是CPU密集型任务。
- Redis的核心任务是操作内存数据结构,几乎不消耗CPU,多线程反而会带来线程竞争、上下文切换的额外开销。
- Redis 6.0引入的多线程,仅用于处理网络IO和协议解析,核心命令的执行仍然是单线程,既解决了网络IO瓶颈,又保留了单线程的简单高效。
3.3 核心原因3:IO多路复用(epoll)
Redis基于epoll实现IO多路复用,用一个线程管理成千上万个socket连接,避免了多线程的资源消耗,同时能高效处理海量并发请求。
四、Redis能做什么?不能做什么?(使用场景边界)
4.1 Redis的典型使用场景
1. 缓存(最核心场景)
- 利用Redis的键过期功能、内存淘汰策略,把热点数据缓存到Redis,加速访问,降低数据库压力,是所有大型网站的标配。
- 典型方案:Redis+MySQL结合,用Redis扛80%的读请求,MySQL做持久化存储。
4.2 Redis绝对不能做的场景(避坑指南)
Redis不是万金油,这些场景绝对不要用:
- 大规模冷数据存储:Redis数据存内存,成本极高,几亿用户行为日志这种冷数据,绝对不要存在Redis,浪费资源。
- 强一致性事务场景:Redis的事务是弱事务,不支持回滚,无法满足金融级强一致需求,这类场景还是要用MySQL。
- 超大规模数据存储:内存容量有限,TB级数据存储用Redis成本不可接受,适合用分布式数据库、对象存储。
总结
- Redis的核心价值:基于内存的高性能键值数据库,解决分布式系统中数据库的性能瓶颈,核心场景是缓存。
- Redis快的核心原因:全内存存储、单线程模型、IO多路复用、精简代码。
- 8大核心特性:速度快、丰富数据结构、功能多、简单稳定、多语言客户端、持久化、主从复制、高可用分布式。
- 使用边界:适合热点数据、高并发场景,不适合冷数据、大规模存储、强一致事务。
- 版本选型:生产用偶数稳定版,入门推荐5.0/6.0。
- 基础使用:掌握redis-cli的两种连接方式,熟悉核心文件作用。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)