第一章:Redis 简介

了解 Redis 的发展历程、核心特性、数据结构和使用场景。

最后更新: 2024-01-15
页面目录

Redis 简介

Redis(Remote Dictionary Server)是一个开源的基于内存的数据结构存储系统,广泛用于缓存、消息队列、实时分析等场景。

什么是 Redis?

Redis 是一个用 C 语言编写的 键值对(Key-Value)存储数据库,它支持多种数据结构,可以作为数据库、缓存、消息队列和流处理引擎使用。

核心特性

特性 说明
内存存储 数据存储在内存中,读写性能极高
多种数据结构 支持 String、Hash、List、Set、Zset、Stream 等
持久化 支持 RDB 和 AOF 两种持久化方式
高可用 支持主从复制、哨兵和集群模式
原子操作 所有操作都是原子性的
客户端分片 支持客户端分片集群
发布/订阅 支持消息发布和订阅功能
Lua 脚本 支持执行 Lua 脚本

Redis 的发展历史

年份 版本 主要特性
2009 Redis 诞生 由 Salvatore Sanfilippo 开发
2010 Redis 2.0 发布订阅、Lua 脚本
2013 Redis 2.8 哨兵模式
2015 Redis 3.0 Cluster 集群模式
2017 Redis 4.0 模块系统、混合持久化
2018 Redis 5.0 Stream 数据类型
2020 Redis 6.0 多线程 I/O、ACL
2022 Redis 7.0 函数(Functions)、Radix Tree 优化

数据结构

Redis 支持多种丰富的数据结构,这是它区别于其他 KV 存储的核心优势:

┌─────────────────────────────────────────────────────────────────┐
│                      Redis 数据结构                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  String (字符串)        ──►  计数器、缓存、Session               │
│         │                                                         │
│  Hash (哈希)            ──►  对象存储、配置信息                    │
│         │                                                         │
│  List (列表)            ──►  消息队列、文章列表                    │
│         │                                                         │
│  Set (集合)             ──►  标签系统、去重                        │
│         │                                                         │
│  Zset (有序集合)        ──►  排行榜、优先级队列                    │
│         │                                                         │
│  Stream (流)            ──►  消息队列、事件流                      │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

各数据结构对比

类型 特点 时间复杂度 典型应用
String 最基本类型 O(1) 缓存、计数器
Hash 字段值对 O(1) 对象存储
List 有序列表 O(1)-O(N) 消息队列
Set 无序去重 O(1)-O(N) 标签、好友
Zset 有序去重 O(log N) 排行榜
Stream 日志流 O(1)-O(N) 消息队列

Redis vs 其他数据库

对比项 Redis Memcached MySQL MongoDB
数据存储 内存 内存 磁盘 磁盘
数据结构 多种 简单KV 关系型 文档型
持久化
集群支持
主从复制
事务支持 有限
内存效率

使用场景

1. 缓存系统

# 设置缓存,过期时间 1 小时
SET cache:user:1001 "{\"name\":\"张三\",\"age\":25}" EX 3600

# 获取缓存
GET cache:user:1001

2. 会话存储

# 存储用户 Session
HSET session:abc123 user_id 1001 username "zhangsan" login_at 1705312800

# 获取 Session 数据
HGETALL session:abc123

3. 实时排行榜

# 添加用户分数
ZADD leaderboard 1500 "user:1001"
ZADD leaderboard 2000 "user:1002"
ZADD leaderboard 1800 "user:1003"

# 获取 Top 3
ZREVRANGE leaderboard 0 2 WITHSCORES

4. 消息队列

# 生产消息
LPUSH queue:tasks "{\"task\":\"send_email\",\"to\":\"user@example.com\"}"

# 消费消息
BRPOP queue:tasks 0

5. 分布式锁

# 获取锁(SET NX EX 原子操作)
SET lock:order:12345 "unique_value" NX EX 30

# 释放锁(Lua 脚本保证原子性)
EVAL "if redis.call('get',KEYS[1])==ARGV[1] then return redis.call('del',KEYS[1]) else return 0 end" 1 lock:order:12345 "unique_value"

Redis 应用架构

┌─────────────────────────────────────────────────────────────────┐
│                     Redis 应用架构                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│   ┌─────────────┐                                               │
│   │   Client    │ ←── 应用服务器(Nginx/Tomcat)                  │
│   └──────┬──────┘                                               │
│          │ Redis CLI / Client                                   │
│   ┌──────▼──────┐                                               │
│   │   Redis     │                                               │
│   │   Server    │  ┌─────────────────────────────────────┐     │
│   │             │  │  In-Memory Data Store               │     │
│   │  ┌────────┐ │  │  • String / Hash / List            │     │
│   │  │ Memory │ │  │  • Set / Zset / Stream              │     │
│   │  └────────┘ │  └─────────────────────────────────────┘     │
│   │      ↓      │                                               │
│   │  ┌────────┐ │  ┌─────────────────────────────────────┐     │
│   │  │ RDB    │ │  │  Persistence                        │     │
│   │  │ AOF    │ │  │  • RDB: Point-in-time snapshot       │     │
│   │  └────────┘ │  │  • AOF: Append-only file             │     │
│   └─────────────┘  └─────────────────────────────────────┘     │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

为什么选择 Redis?

优势

  • 极高的性能:每秒可处理百万级请求
  • 丰富的数据结构:满足各种业务需求
  • 丰富的客户端:支持几乎所有编程语言
  • 完善的生态:Redis Stack、Redis Enterprise、Redis Cloud
  • 活跃的社区:持续更新,文档完善
  • 灵活的部署:单机、主从、哨兵、集群多种模式

适用场景

场景 推荐配置
缓存 单机或主从 + 哨兵
会话存储 主从 + 哨兵
实时排行榜 Redis Cluster
消息队列 Stream 或 List
分布式锁 单机或 RedLock 算法

常用术语表

术语 说明
Key 键,唯一标识一个值
Value 值,可以是各种数据类型
TTL Time To Live,键的过期时间
Pipeline 管道,批量执行命令
Pub/Sub 发布/订阅模式
Lua Lua 脚本语言
Cluster 分布式集群
Sentinel 哨兵,监控和故障转移

下一步

接下来让我们学习如何安装和配置 Redis。

👉 安装与配置