- 字符串(String):不只是存文本
常用命令:
bash
# 基础操作
SET user:1001 "张三" # 设置值
GET user:1001 # 获取值
DEL user:1001 # 删除键
# 高级操作
INCR article:view:20240301 # 自增1(统计阅读量)
INCRBY article:view:20240301 10 # 自增10
SETEX captcha:135xxxx1234 300 "3845" # 5分钟过期
实战场景: 验证码、计数器、简单缓存
- 列表(List):消息队列的简单实现
常用命令:
bash
# 模拟消息队列
LPUSH order:queue "订单1001" # 左侧插入
RPOP order:queue # 右侧取出(队列)
# 或
RPUSH order:queue "订单1001" # 右侧插入
LPOP order:queue # 左侧取出(栈)
# 其他操作
LRANGE order:queue 0 10 # 查看前10个
LLEN order:queue # 获取长度
实战场景: 最新消息列表、简单任务队列
- 集合(Set):去重和关系运算
常用命令:
bash
# 用户标签系统
SADD user:1001:tags "科技" "编程" "Java"
SADD user:1002:tags "科技" "旅游" "摄影"
# 查找共同兴趣
SINTER user:1001:tags user:1002:tags # 交集:"科技"
SUNION user:1001:tags user:1002:tags # 并集
SISMEMBER user:1001:tags "编程" # 是否包含
实战场景: 标签系统、共同好友、抽奖去重
- 哈希表(Hash):存储对象的最佳选择
常用命令:
bash
# 存储用户对象
HSET user:1001 name "张三" age 28 city "北京"
HGET user:1001 name # 获取字段
HGETALL user:1001 # 获取所有
HINCRBY user:1001 age 1 # 年龄+1
HMSET user:1002 name "李四" age 25 city "上海" # 批量设置
实战场景: 用户信息、商品信息、配置存储
- 有序集合(ZSet):排行榜的核心
常用命令:
bash
# 游戏排行榜
ZADD game:ranking 5000 "玩家A" 4800 "玩家B" 5200 "玩家C"
ZREVRANGE game:ranking 0 9 WITHSCORES # 前10名(带分数)
ZRANK game:ranking "玩家A" # 查看排名
ZINCRBY game:ranking 100 "玩家A" # 增加100分
# 时间范围查询
ZADD user:login 1740825600 "1001" # 时间戳为分数
ZRANGEBYSCORE user:login 1740825600 1740912000 # 24小时内登录
实战场景: 实时排行榜、延迟队列、时间轴
- 发布订阅(Pub/Sub):实时消息系统
常用命令:
bash
# 终端1:订阅频道
SUBSCRIBE news:sports news:tech
# 终端2:发布消息
PUBLISH news:sports "中国队夺冠!"
PUBLISH news:tech "Redis 7.0发布"
# 模式订阅
PSUBSCRIBE news:* # 订阅所有news开头的频道
实战场景: 实时通知、聊天室、系统事件广播
- 数据过期策略:自动清理
实用命令:
bash
# 设置过期时间
SET session:token "abc123"
EXPIRE session:token 3600 # 1小时后过期
TTL session:token # 查看剩余时间
# 直接设置带过期时间的键
SETEX cache:data 300 "value" # 5分钟过期
实战问题
问题1:Redis为什么快?
回答要点:内存操作、单线程避免上下文切换、IO多路复用
问题2:缓存穿透/雪崩/击穿怎么解决?
· 穿透:布隆过滤器
· 雪崩:随机过期时间
· 击穿:互斥锁或永不过期热点数据
问题3:选择合适的数据结构
bash
# 场景分析:
用户会话 -> String(简单键值)
购物车 -> Hash(字段频繁更新)
好友关系 -> Set(去重和集合运算)
消息时间线 -> ZSet(按时间排序)
性能优化小贴士
- 键名设计:业务:类型:id(如 user:info:1001)
- 批量操作:使用Pipeline减少网络往返
- 内存控制:设置maxmemory和淘汰策略
- 连接复用:使用连接池
快速参考卡片
结构 特点 适用场景
String 简单键值 缓存、计数器
List 有序可重复 消息队列、最新列表
Set 无序去重 标签、共同好友
Hash 字段操作 对象存储、配置
ZSet 有序带分数 排行榜、优先级队列
Pub/Sub 发布订阅 实时通知、聊天
记住:根据业务场景选择数据结构,而不是硬套模式。一个精心选择的数据结构,胜过复杂的代码逻辑!