学习 Redis(Remote Dictionary Server)是掌握高性能缓存、消息队列和实时数据处理的关键技能。以下是系统化的 Redis 学习路径,从基础到企业级应用,涵盖核心概念、实战技巧和性能优化。
一、Redis 基础入门
1. 安装与启动
安装方式
# Linux (Ubuntu/Debian)
sudo apt install redis-server
# Mac
brew install redis
# Docker运行
docker run --name myredis -p 6379:6379 -d redis
服务管理
# 启动/停止
sudo systemctl start redis-server
sudo systemctl stop redis-server
# 命令行连接
redis-cli
> PING # 应返回 "PONG"
2. 五大核心数据结构
| 类型 | 特点 | 示例 |
|---|---|---|
| String | 二进制安全的字符串 | SET name "Alice" |
| Hash | 字段-值映射表 | HSET user:1000 name "Bob" age 30 |
| List | 双向链表 | LPUSH tasks "task1" |
| Set | 无序唯一集合 | SADD tags "redis" "db" |
| Sorted Set | 带分数的有序集合 | ZADD leaderboard 100 "player1" |
基础操作演示
# String
SET counter 100
INCR counter # 原子性+1
# Hash
HMSET product:100 name "Phone" price 599 stock 10
HGET product:100 price
# List
LPUSH orders "order1"
RPOP orders
# Set
SADD ip_blacklist "192.168.1.1"
SISMEMBER ip_blacklist "192.168.1.1"
# Sorted Set
ZADD temperature 23.5 "city:tokyo"
ZRANGE temperature 0 -1 WITHSCORES
二、Redis 进阶特性
1. 持久化机制
RDB (快照)
# 配置文件设置
save 900 1 # 15分钟内至少1个key变化
save 300 10 # 5分钟内至少10个key变化
dbfilename dump.rdb
AOF (追加日志)
appendonly yes
appendfsync everysec # 折衷方案
2. 事务与Lua脚本
# 事务(MULTI/EXEC)
MULTI
SET balance 100
INCRBY balance 50
EXEC
# Lua脚本(原子性操作)
EVAL "return redis.call('GET', KEYS[1])" 1 mykey
3. 发布订阅
# 终端1:订阅频道
SUBSCRIBE news
# 终端2:发布消息
PUBLISH news "Redis 6.0 released!"
三、企业级应用方案
1. 缓存设计模式
缓存策略
# 缓存击穿防护(伪代码)
value = GET key
IF value == NULL THEN
value = DB.query(...)
SETEX key 3600 value # 设置过期时间
END
RETURN value
缓存雪崩预防
# 差异化过期时间
SETEX cache_key1 3600 value1
SETEX cache_key2 3700 value2
2. 集群方案
主从复制
# 从节点配置 (redis.conf)
replicaof 主节点IP 6379
Redis Cluster
# 创建集群(至少3主3从)
redis-cli --cluster create 节点1:端口 节点2:端口 ... --cluster-replicas 1
3. 性能优化
内存优化
# 使用Hash压缩存储
HMSET user:1000 name "Alice" age 30 email "alice@example.com"
# 替代方案
SET user:1000:name "Alice"
SET user:1000:age 30
连接池配置
# Python示例
import redis
pool = redis.ConnectionPool(
max_connections=50,
host='localhost',
port=6379
)
r = redis.Redis(connection_pool=pool)
四、实战项目案例
1. 电商应用场景
| 场景 | Redis方案 |
|---|---|
| 商品库存缓存 | String (DECR原子操作) |
| 秒杀系统 | List + Lua脚本 |
| 购物车 | Hash (用户ID作为key) |
| 商品排行榜 | Sorted Set |
2. 社交网络功能
# 关注关系
SADD user:1000:following 2000
SADD user:2000:followers 1000
# 共同关注
SINTER user:1000:following user:2000:following
3. 实时数据分析
# 使用HyperLogLog统计UV
PFADD page:home:uv "user1" "user2"
PFCOUNT page:home:uv
五、运维与监控
1. 常用命令
# 内存分析
INFO memory
MEMORY USAGE key
# 慢查询监控
CONFIG SET slowlog-log-slower-than 10000 # 10ms
SLOWLOG GET 5
2. 安全配置
# 修改默认端口
port 6380
# 设置密码
requirepass yourpassword
# 禁用危险命令
rename-command FLUSHALL ""
3. 监控工具
- RedisInsight:官方可视化工具
- Prometheus + Grafana:企业级监控方案
- redis-cli –stat:实时状态监控
六、学习资源推荐
官方文档
书籍
- 《Redis设计与实现》
- 《Redis开发与运维》
在线实验
七、学习建议
- 从单机版开始:先掌握单节点再学集群
- 理解数据持久化:RDB和AOF的适用场景
- 性能压测:使用
redis-benchmark测试吞吐量 - 阅读源码:从简单数据结构(如SDS)开始研究
通过系统学习+项目实践,1个月可掌握Redis核心功能,3个月能设计复杂缓存架构。记住:Redis的威力在于正确的数据结构选择和合理的过期策略! 🚀