Redis简介 #

一、什么是Redis #

1.1 Redis定义 #

Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,可以用作:

  • 数据库
  • 缓存
  • 消息队列
  • 会话存储
text
┌─────────────────────────────────────────┐
│              Redis 架构                  │
├─────────────────────────────────────────┤
│  ┌─────────┐  ┌─────────┐  ┌─────────┐ │
│  │ 客户端1  │  │ 客户端2  │  │ 客户端N  │ │
│  └────┬────┘  └────┬────┘  └────┬────┘ │
│       │            │            │       │
│       └────────────┼────────────┘       │
│                    ▼                    │
│       ┌─────────────────────┐          │
│       │   Redis Server      │          │
│       │   (内存存储)         │          │
│       └─────────────────────┘          │
│                    │                    │
│       ┌────────────┴────────────┐      │
│       ▼                         ▼      │
│  ┌─────────┐              ┌─────────┐  │
│  │ RDB文件  │              │ AOF文件  │  │
│  │ (快照)   │              │ (日志)   │  │
│  └─────────┘              └─────────┘  │
└─────────────────────────────────────────┘

1.2 发展历史 #

时间 事件
2009年 Salvatore Sanfilippo(antirez)开发Redis
2010年 VMware赞助Redis开发
2013年 Redis 2.6发布,引入Lua脚本
2015年 Redis 3.0发布,支持集群
2017年 Redis 4.0发布,引入模块系统
2020年 Redis 6.0发布,多线程IO
2022年 Redis 7.0发布,大幅性能提升

1.3 为什么选择Redis #

text
传统数据库 vs Redis

传统数据库:
┌─────────────────────────────────────┐
│  应用 → 网络 → 数据库 → 磁盘读取    │
│         延迟:10-100ms              │
└─────────────────────────────────────┘

Redis:
┌─────────────────────────────────────┐
│  应用 → 网络 → Redis → 内存读取     │
│         延迟:0.1-1ms               │
└─────────────────────────────────────┘

二、Redis核心特点 #

2.1 性能极高 #

text
Redis性能指标:

读操作:110,000次/秒
写操作:81,000次/秒

原因:
1. 纯内存操作
2. 单线程避免上下文切换
3. IO多路复用
4. 高效的数据结构

2.2 丰富的数据类型 #

数据类型 说明 典型场景
String 字符串 缓存、计数器、分布式锁
List 列表 消息队列、最新列表
Set 集合 标签、社交关系
Hash 哈希表 对象存储、购物车
ZSet 有序集合 排行榜、延时队列
Stream 流 消息队列
Geo 地理位置 附近的人、打车
HyperLogLog 基数统计 UV统计
Bitmap 位图 签到、在线状态

2.3 原子操作 #

text
所有Redis命令都是原子性的:

示例:INCR命令
┌─────────────────────────────────────┐
│ 客户端A: INCR counter               │
│ 客户端B: INCR counter               │
│                                     │
│ 结果:counter = 2(不会出现竞争)   │
└─────────────────────────────────────┘

2.4 持久化支持 #

text
Redis提供两种持久化方式:

1. RDB(快照)
   ┌─────────────────────────────────┐
   │ 定时将内存数据保存到磁盘        │
   │ 文件小,恢复快                  │
   │ 可能丢失部分数据                │
   └─────────────────────────────────┘

2. AOF(日志)
   ┌─────────────────────────────────┐
   │ 记录每个写操作                  │
   │ 数据更安全                      │
   │ 文件较大                        │
   └─────────────────────────────────┘

2.5 支持过期时间 #

bash
# 设置键的过期时间
SET session:123 "user_data" EX 3600

# 10秒后自动删除
EXPIRE key 10

# 查看剩余时间
TTL key

三、应用场景 #

3.1 缓存 #

text
缓存架构:

┌──────────┐     ┌──────────┐     ┌──────────┐
│  客户端   │────▶│  Redis   │────▶│  数据库   │
└──────────┘     └──────────┘     └──────────┘
                      │
                      ▼
               缓存命中直接返回
               缓存未命中查数据库
               并写入缓存
bash
# 缓存示例
SET user:1001 '{"name":"John","age":25}' EX 3600
GET user:1001

3.2 会话存储 #

text
分布式会话:

┌──────────┐     ┌──────────┐
│  服务器A  │     │  服务器B  │
└────┬─────┘     └────┬─────┘
     │                │
     └────────┬───────┘
              ▼
       ┌──────────┐
       │  Redis   │
       │ 会话存储  │
       └──────────┘

3.3 排行榜 #

bash
# 使用ZSet实现排行榜
ZADD leaderboard 100 user:1
ZADD leaderboard 200 user:2
ZADD leaderboard 150 user:3

# 获取前10名
ZREVRANGE leaderboard 0 9 WITHSCORES

3.4 计数器 #

bash
# 文章阅读量
INCR article:1001:views

# 点赞数
INCR article:1001:likes

# 分布式ID生成
INCR global:next_id

3.5 消息队列 #

bash
# 使用List实现简单队列
LPUSH queue:email "email_data"
RPOP queue:email

# 使用Stream实现消息队列
XADD mystream * field1 value1
XREAD COUNT 2 STREAMS mystream 0

3.6 分布式锁 #

bash
# 简单分布式锁
SET lock:resource "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:resource "unique_value"

四、Redis与其他数据库对比 #

4.1 Redis vs Memcached #

特性 Redis Memcached
数据类型 丰富 仅字符串
持久化 支持 不支持
集群 原生支持 需要客户端分片
线程模型 单线程 多线程
内存管理 更高效 简单
事务 支持 不支持

4.2 Redis vs MySQL #

特性 Redis MySQL
存储位置 内存 磁盘
速度 极快 较慢
数据类型 NoSQL 关系型
事务 简单事务 完整ACID
查询 键值查询 SQL查询
持久化 可选 必须

五、Redis适用场景总结 #

5.1 适合使用Redis的场景 #

text
✓ 高性能缓存
✓ 会话存储
✓ 排行榜/计数器
✓ 消息队列
✓ 实时系统
✓ 社交网络
✓ 地理位置应用

5.2 不适合使用Redis的场景 #

text
✗ 数据量超过内存容量
✗ 需要复杂SQL查询
✗ 需要完整ACID事务
✗ 数据安全性要求极高

六、总结 #

Redis核心特点:

特点 说明
高性能 内存存储,QPS可达10万+
丰富类型 5种基础类型+多种高级类型
原子性 所有操作原子执行
持久化 RDB/AOF两种方式
高可用 主从复制、哨兵、集群

下一步,让我们学习Redis的安装与配置!

最后更新:2026-03-27