redis系列



前言

Redis 是在内存中存储数据的主要应用与分布式系统,解决进程间隔离问题,基于网络采用进程间通讯同步不同进程间的数据。

Mysql 访问速度较慢,数据存储在硬盘,Redis 数据存储在内存。


一、先搞懂:为什么我们需要Redis?

1.1 从单机架构到分布式系统的痛点

最早期的网站都是单机架构:一台服务器同时承载应用服务(用户、商品、交易等业务逻辑)和数据库服务(MySQL存储数据)。

  • 优点:架构简单、开发运维成本低,绝大多数中小公司初期都用这种架构。
  • 致命问题:单机硬件资源有上限(CPU、内存、硬盘、网络),当业务爆发、用户量和数据量暴涨时,单机会彻底扛不住。

当单机性能到顶后,我们有两个优化方向:

  1. 纵向扩展:给单台机器加硬件(加CPU、内存、换SSD硬盘),但受限于主板扩展能力,终究有上限。
  2. 软件优化:性能调优、代码优化,对技术水平要求极高,不是长久之计。

当纵向扩展也无法满足需求时,我们必须引入分布式系统:用多台机器分担压力,但分布式会带来系统复杂度飙升、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不是万金油,这些场景绝对不要用:

  1. 大规模冷数据存储:Redis数据存内存,成本极高,几亿用户行为日志这种冷数据,绝对不要存在Redis,浪费资源。
  2. 强一致性事务场景:Redis的事务是弱事务,不支持回滚,无法满足金融级强一致需求,这类场景还是要用MySQL。
  3. 超大规模数据存储:内存容量有限,TB级数据存储用Redis成本不可接受,适合用分布式数据库、对象存储。

总结

  1. Redis的核心价值:基于内存的高性能键值数据库,解决分布式系统中数据库的性能瓶颈,核心场景是缓存。
  2. Redis快的核心原因:全内存存储、单线程模型、IO多路复用、精简代码。
  3. 8大核心特性:速度快、丰富数据结构、功能多、简单稳定、多语言客户端、持久化、主从复制、高可用分布式。
  4. 使用边界:适合热点数据、高并发场景,不适合冷数据、大规模存储、强一致事务。
  5. 版本选型:生产用偶数稳定版,入门推荐5.0/6.0。
  6. 基础使用:掌握redis-cli的两种连接方式,熟悉核心文件作用。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐