Redis 教程(中文版)
Redis(REmote DIctionary Server)是一个高性能的开源、内存键值存储数据库,常用于缓存、会话存储、排行榜、消息队列等场景。本教程从零开始,带你快速上手 Redis。
一、Redis 简介
| 特性 | 说明 |
|---|---|
| 数据结构丰富 | String、Hash、List、Set、Sorted Set、Bitmap、HyperLogLog、Geo 等 |
| 内存存储 | 数据默认存于内存,速度极快(>10万 QPS) |
| 支持持久化 | RDB(快照)、AOF(日志) |
| 高可用 | 主从复制、Sentinel、Redis Cluster |
| 发布/订阅 | 支持 Pub/Sub 消息模式 |
| Lua 脚本 | 支持服务器端脚本 |
| 事务 | MULTI/EXEC 支持简单事务 |
二、安装 Redis
1. Linux(Ubuntu/Debian)
# 更新包列表
sudo apt update
# 安装 Redis
sudo apt install redis-server
# 启动服务
sudo systemctl start redis
# 开机自启
sudo systemctl enable redis
2. macOS(Homebrew)
brew install redis
brew services start redis
3. Windows(官方已停止支持,可用 WSL 或 Docker)
# Docker 方式(推荐)
docker run -d --name my-redis -p 6379:6379 redis:latest
验证安装:
redis-cli ping
# 输出:PONG
三、基本命令操作(redis-cli)
1. 字符串(String)
SET name "张三"
GET name
INCR counter # 自增
DECR counter # 自减
DEL name
2. 哈希(Hash)
HSET user:1001 name "李四" age 25
HGET user:1001 name
HGETALL user:1001
HINCRBY user:1001 age 1
3. 列表(List)
LPUSH mylist "A"
RPUSH mylist "C"
LPUSH mylist "B"
LRANGE mylist 0 -1 # 输出: B A C
LPOP mylist # 弹出 B
RPOP mylist # 弹出 C
4. 集合(Set)
SADD myset "apple" "banana" "apple"
SMEMBERS myset # apple, banana
SINTER set1 set2 # 交集
SUNION set1 set2 # 并集
5. 有序集合(Sorted Set)
ZADD ranking 100 "张三"
ZADD ranking 95 "李四"
ZADD ranking 88 "王五"
ZRANGE ranking 0 -1 WITHSCORES
ZREVRANK ranking "李四" # 排名第几(从0开始)
四、持久化配置(redis.conf)
# RDB 快照(默认)
save 900 1 # 900秒内至少1个键变化
save 300 10
save 60 10000
# AOF 日志(更安全)
appendonly yes
appendfsync everysec # 每秒同步
重启 Redis 后自动加载持久化数据。
五、主从复制(Replication)
主节点(master.conf)
bind 0.0.0.0
port 6379
从节点(slave.conf)
bind 0.0.0.0
port 6380
replicaof 127.0.0.1 6379 # 指向主节点
启动:
redis-server master.conf
redis-server slave.conf
查看状态:
redis-cli -p 6380 info replication
六、发布/订阅(Pub/Sub)
# 订阅频道
SUBSCRIBE news
# 发布消息(另一个终端)
PUBLISH news "Hello Redis!"
七、事务与 Lua 脚本
事务
MULTI
SET key1 "value1"
INCR counter
EXEC
Lua 脚本
EVAL "return redis.call('set', KEYS[1], ARGV[1])" 1 name "王五"
八、常用客户端
| 语言 | 客户端 |
|---|---|
| Python | redis-py |
| Node.js | ioredis / node-redis |
| Java | Jedis / Lettuce |
| Go | go-redis |
Python 示例
pip install redis
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('name', '张三')
print(r.get('name')) # b'张三'
九、Redis 集群(Cluster)
# 启动多个实例(不同端口)
redis-server --port 7000 --cluster-enabled yes
redis-server --port 7001 --cluster-enabled yes
...
# 创建集群
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 ... --cluster-replicas 1
十、性能优化建议
- 避免大 key:拆分大 List/Hash
- 使用 Pipeline 批量操作
- 设置合理过期时间:
EXPIRE key 3600 - 监控慢查询:
SLOWLOG GET 10 - 内存管理:
maxmemory-policy allkeys-lru
十一、常见问题
| 问题 | 解决方案 |
|---|---|
| 连接超时 | 检查防火墙、bind 配置 |
| 内存爆掉 | 设置 maxmemory + 淘汰策略 |
| 数据丢失 | 开启 AOF + RDB |
| 主从不同步 | 检查网络、日志 |
学习资源
- 官方文档:https://redis.io/documentation
- Redis 大学:https://university.redis.com
- 《Redis 实战》书籍
- GitHub: https://github.com/redis/redis
动手练习:
# 1. 安装 Redis
# 2. 启动 redis-cli
# 3. 执行以下命令:
SET hello "world"
INCRBY visits 10
EXPIRE hello 60
TTL hello
你已掌握 Redis 基础!
后续进阶方向:
- Redis Cluster 高可用
- Redis Module(RedisJSON、RediSearch)
- 缓存穿透/雪崩/击穿解决方案
- 与 Spring Boot 集成
需要 完整项目实战(如:秒杀系统、排行榜)?告诉我,我给你代码!