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