一、什么是 Redis
Redis (Remote Dictionary Server)是一个开源的内存数据结构存储系统,可以用作数据库、缓存、消息代理和队列。
二、Redis 的特点
2.1 内存存储
- 数据主要存储在内存中,读写速度极快
- 支持数据持久化到磁盘(可选)
2.2 键值存储
- Redis 是一个键值对数据库
- 键(Key)是字符串类型
- 值(Value)支持多种数据结构
2.3 支持多种数据结构
| 数据结构 | 说明 | 应用场景 |
|---|---|---|
| String | 字符串 | 缓存、计数器 |
| Hash | 哈希表 | 用户信息、配置 |
| List | 列表 | 消息队列、最新动态 |
| Set | 无序集合 | 去重、好友推荐 |
| Sorted Set | 有序集合 | 排行榜 |
| Pub/Sub | 发布订阅 | 实时消息 |
2.4 性能优势
- 读写速度:10万+次/秒
- 低延迟:亚毫秒级响应
- 高并发:支持大量并发连接
2.5 Redis 不擅长的领域
- 大规模持久化存储 :历史数据归档
- 复杂事务处理 :金融交易系统
- 复杂查询分析 :报表生成、数据分析
- 强一致性要求 :银行转账、订单系统
- 关系型数据 :多表关联查询
三、Redis 的常见用途
3.1 缓存
用户请求 → Redis缓存 → 命中返回
↓ (未命中)
→ 数据库 → 写入缓存 → 返回
3.2 会话存储
用户登录 → Redis存储Session → 请求验证Session
3.3 消息队列
生产者 → Redis List → 消费者
3.4 排行榜
用户得分 → Redis Sorted Set → 获取排名
四、Redis 与 Docker
4.1 运行 Redis 容器
docker run -d --name myredis -p 6379:6379 redis:6
命令解释:
-d:后台运行--name myredis:容器名称-p 6379:6379:端口映射(6379是Redis默认端口)redis:6:使用Redis 6版本镜像
4.2 带持久化的 Redis
docker run -d --name myredis -p 6379:6379 \
-v ~/redis/data:/data \
redis:6 redis-server --appendonly yes
命令解释:
-v ~/redis/data:/data:数据卷挂载(持久化)redis-server --appendonly yes:启用AOF持久化
4.3 进入 Redis 命令行
docker exec -it myredis redis-cli
五、Redis 基本命令
5.1 String 类型操作
# 设置值
SET name "张三"
# 获取值
GET name
# 自增
INCR counter
# 设置过期时间(60秒)
SET token "abc123" EX 60
5.2 Hash 类型操作
# 设置哈希字段
HSET user:1 name "张三" age 25 email "zhangsan@example.com"
# 获取哈希字段
HGET user:1 name
# 获取所有字段
HGETALL user:1
5.3 List 类型操作
# 左推入队
LPUSH queue "task1"
LPUSH queue "task2"
# 右推出队
RPOP queue
# 获取列表长度
LLEN queue
5.4 Set 类型操作
# 添加元素
SADD users "张三" "李四" "王五"
# 查看元素
SMEMBERS users
# 判断元素是否存在
SISMEMBER users "张三"
5.5 Sorted Set 类型操作
# 添加元素(带分数)
ZADD ranking 100 "张三" 95 "李四" 90 "王五"
# 获取排名(从高到低)
ZRANGE ranking 0 -1 WITHSCORES
# 获取某人的分数
ZSCORE ranking "张三"
六、Docker Compose 中的 Redis
配置示例
version: '3.8'
services:
redis:
image: redis:6
container_name: myredis
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: redis-server --appendonly yes
restart: always
volumes:
redis_data:
应用连接 Redis
Python 示例:
import redis
# 连接 Redis
r = redis.Redis(host='redis', port=6379, decode_responses=True)
# 设置缓存
r.set('cache:users', '[{"id": 1, "name": "张三"}]', ex=60)
# 获取缓存
users = r.get('cache:users')
七、Redis 持久化策略
7.1 RDB(快照)
- 定期将内存数据快照保存到磁盘
- 适合备份和灾难恢复
- 可能丢失最后一次快照后的修改
7.2 AOF(追加日志)
- 记录每次写操作到日志文件
- 重启时重新执行日志恢复数据
- 数据完整性更好
7.3 混合模式
- 同时使用 RDB 和 AOF
- 兼顾性能和数据安全
八、总结
| 特性 | 说明 |
|---|---|
| 类型 | 内存键值存储 |
| 速度 | 极高(10万+次/秒) |
| 数据结构 | String、Hash、List、Set、Sorted Set |
| 持久化 | RDB、AOF、混合模式 |
| 用途 | 缓存、会话存储、消息队列、排行榜 |
Redis 是现代 Web 应用中不可或缺的组件,尤其在需要高并发、低延迟的场景下表现出色!