返回主页 学习路径
Redis
亚毫秒延迟 · 数据结构丰富 · 全能选手
Redis(Remote Dictionary Server)由 Salvatore Sanfilippo(antirez)于 2009 年创建,是最流行的内存数据存储系统。Redis 支持丰富的数据结构(String、Hash、List、Set、ZSet、Stream、Bitmap、HyperLogLog、Geospatial),并提供持久化、主从复制、集群、事务、Lua 脚本等高级特性。凭借亚毫秒级的响应速度,Redis 已成为缓存、会话存储、消息队列、排行榜、实时分析等场景的标准解决方案。Twitter、GitHub、Stack Overflow 及国内所有互联网公司都在使用 Redis。
内存数据库 · 缓存之王
📅 诞生时间2009年 · Salvatore Sanfilippo (antirez)
🧩 类型键值存储 · 内存数据库
📊 数据模型多种数据结构(String/Hash/List/Set/ZSet/Stream)
⚡速度
10/10
📦生态
10/10
🧠易用
8/10
🚀扩展性
7/10

📑 本文目录

📌 第一部分:Redis 概览与定位

1.1 定义与全称

Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,由 Salvatore Sanfilippo(antirez)于 2009 年创建。Redis 以其 极致的速度、丰富的数据结构、强大的功能 成为现代应用架构中不可或缺的组件。

1.2 核心定位

Redis 的核心定位是 高性能内存数据存储。它提供了:

1.3 主要应用领域

1.4 知名案例


📜 第二部分:Redis 的历史与发展演进

2.1 诞生背景(2009年)

Redis 由 Salvatore Sanfilippo(antirez)于 2009 年创建,最初是为了解决 LLOOGG 网站的性能问题。antirez 希望有一个 基于内存、支持多种数据结构 的存储系统,而 Redis 应运而生。Redis 的名字来源于 "Remote Dictionary Server"(远程字典服务器)。

2.2 关键版本里程碑

2.3 设计哲学


⚙️ 第三部分:核心数据结构与命令

3.1 String(字符串)

最基本的数据类型,存储字符串、整数、浮点数。

# 设置值
SET key "value"

# 获取值
GET key

# 设置过期时间(秒)
SETEX key 60 "value"

# 增加(整数)
INCR counter
INCRBY counter 10

# 增加(浮点数)
INCRBYFLOAT price 1.5

# 获取并设置
GETSET key "new_value"

# 批量操作
MSET key1 "value1" key2 "value2"
MGET key1 key2

3.2 Hash(哈希)

存储多个字段-值对,适合存储对象。

# 设置字段
HSET user:1001 name "Alice" age 30 city "Beijing"

# 获取字段
HGET user:1001 name
HGETALL user:1001

# 获取所有字段
HKEYS user:1001
HVALS user:1001

# 字段增加
HINCRBY user:1001 age 1

# 判断字段是否存在
HEXISTS user:1001 name

# 删除字段
HDEL user:1001 city

3.3 List(列表)

有序的字符串列表,支持从两端操作。

# 左侧插入
LPUSH queue "task1" "task2"

# 右侧插入
RPUSH queue "task3" "task4"

# 左侧弹出(移除并返回)
LPOP queue

# 右侧弹出
RPOP queue

# 获取范围
LRANGE queue 0 -1

# 获取长度
LLEN queue

# 阻塞弹出(队列)
BLPOP queue 10  # 等待 10 秒

3.4 Set(集合)

无序且不重复的字符串集合,支持交集、并集、差集运算。

# 添加成员
SADD tags "redis" "database" "cache"

# 删除成员
SREM tags "database"

# 获取所有成员
SMEMBERS tags

# 判断成员是否存在
SISMEMBER tags "redis"

# 交集
SINTER set1 set2

# 并集
SUNION set1 set2

# 差集
SDIFF set1 set2

# 获取集合大小
SCARD tags

# 随机弹出
SPOP tags
SRANDMEMBER tags 3

3.5 ZSet(有序集合)

每个成员关联一个分数,按分数排序,适合排行榜等场景。

# 添加成员
ZADD leaderboard 100 "Alice" 90 "Bob" 95 "Charlie"

# 获取排名
ZRANK leaderboard "Alice"   # 排名(升序)
ZREVRANK leaderboard "Alice"  # 排名(降序)

# 获取范围
ZRANGE leaderboard 0 -1 WITHSCORES   # 升序
ZREVRANGE leaderboard 0 -1 WITHSCORES # 降序

# 按分数范围查询
ZRANGEBYSCORE leaderboard 90 100

# 增加分数
ZINCRBY leaderboard 5 "Alice"

# 删除成员
ZREM leaderboard "Alice"

# 获取数量
ZCARD leaderboard
ZCOUNT leaderboard 90 100

3.6 Stream(消息流)

类似 Kafka 的消息队列,支持消费者组。

# 添加消息
XADD mystream * user "Alice" message "Hello"

# 读取消息
XREAD COUNT 10 STREAMS mystream 0

# 创建消费者组
XGROUP CREATE mystream mygroup $ MKSTREAM

# 消费者读取
XREADGROUP GROUP mygroup consumer1 COUNT 10 STREAMS mystream >

3.7 其他数据结构

3.8 高级特性

# 事务(原子执行)
MULTI
SET key1 "value1"
SET key2 "value2"
EXEC

# Lua 脚本(原子操作)
EVAL "return redis.call('SET', KEYS[1], ARGV[1])" 1 key "value"

# 发布/订阅
# 订阅
SUBSCRIBE channel1
# 发布
PUBLISH channel1 "Hello"

# 分布式锁(Redlock 算法)
SET lock_key unique_value NX PX 10000

# 管道(批量执行,减少网络开销)
PIPELINE

⚡ 第四部分:持久化与高可用

4.1 持久化方式

4.2 主从复制(Replication)

4.3 Sentinel(高可用)

4.4 Redis Cluster(集群)


⚖️ 第五部分:Redis 与其他数据库对比

5.1 Redis vs Memcached

5.2 Redis vs MongoDB

5.3 Redis vs MySQL

5.4 Redis vs Kafka


🧠 第六部分:学习建议

1
基础入门

Redis 安装、基本命令、五种核心数据结构(String/Hash/List/Set/ZSet)

2
核心进阶

持久化(RDB/AOF)、事务、Lua 脚本、发布/订阅

3
高级特性

Redis Sentinel(高可用)、Redis Cluster(集群)、Pipeline(管道)

4
实战与优化

缓存设计、缓存穿透/击穿/雪崩、分布式锁、性能调优

推荐学习资源


🎯 总结升华

Redis 是后端开发的"瑞士军刀"。

它既是缓存、消息队列、分布式锁、实时排行榜、又是数据存储。Redis 的 丰富数据结构、极致性能、强大功能 让它成为现代应用架构中不可或缺的组件。

无论你使用什么编程语言(Java、Python、Go、PHP、Node.js),Redis 都是 后端开发者的必修课。掌握 Redis,意味着你能够解决缓存、并发、实时数据等核心问题。

"Redis 是每个后端开发者都应该掌握的技术。" ⚡

🔖 相关标签
#缓存 #内存数据库 #数据结构 #消息队列 #分布式锁 #排行榜 #高可用
📄 本文档为 Redis 完整白皮书 · 最后更新于 2026年06月28日