思维导图概览
一、全局命令精要
⚠️ 1.1 危险命令KEYS
# 生产环境禁止使用(时间复杂度O(n))
KEYS *
# 安全替代方案(时间复杂度O(1))
DBSIZE
⏱ 1.2 过期时间管理
# 设置18秒后过期
EXPIRE lijin 18
# 毫秒级精度
PEXPIRE lijin 9000
# 指定时间戳过期
EXPIREAT key 1730332800
🔁 1.3 重命名陷阱
# 安全重命名(防止覆盖已有键)
RENAMENX old_key new_key
致命陷阱:SET操作会清除已有过期时间!修改已设置过期时间的键值后,必须重新设置过期时间。
二、数据结构深度解析
2.1 字符串(String)
核心场景:计数器、分布式Session、限流系统
# 原子自增操作
INCR article_view_101
# 分布式锁实现
SETNX lock:order_123 true
EXPIRE lock:order_123 30
# 批量操作提升性能
MSET user:1:name "LiJing" user:1:age 30
MGET user:1:name user:1:age
最佳实践:单值大小控制在500字节内
2.2 哈希(Hash)
核心场景:对象存储、商品属性
# 存储用户对象
HSET user:1001 name "LiJing" age 18 city "Changsha"
# 字段自增
HINCRBY user:1001 score 5
# 批量获取指定字段
HMGET user:1001 name age
优势对比:
存储方式 | 优点 | 缺点 |
---|---|---|
多String键 | 直观 | 键数量爆炸 |
JSON序列化 | 结构清晰 | 序列化开销大 |
Hash结构 | 内存优+字段控制 | 不支持嵌套 |
2.3 列表(List)
核心场景:消息队列、最新文章列表
# 实现消息队列
LPUSH news "Breaking: Redis 7 released!"
RPOP news
# 阻塞式消费
BRPOP order_queue 30
# 分页获取文章
LRANGE articles 0 9
数据结构转换:
左进右出 → 队列(FIFO)
左进左出 → 栈(LIFO)
左进右出+阻塞 → 消息队列
2.4 集合(Set)
核心场景:标签系统、共同好友
# 用户标签管理
SADD user:1001:tags "tech" "redis" "database"
# 共同兴趣计算
SINTER user:1001:tags user:1002:tags
# 随机抽奖
SRANDMEMBER lucky_draw 3
特点:自动去重、无序存储、支持集合运算
2.5 有序集合(ZSet)
核心场景:排行榜、带权重队列
# 成绩排行榜
ZADD exam_scores 90 "LiJing" 95 "BoBo" 100 "MaSheng"
# 查询TOP3
ZREVRANGE exam_scores 0 2 WITHSCORES
# 更新分数
ZINCRBY exam_scores 5 "LiJing"
# 聚合多科成绩
ZUNIONSTORE total_score 2 math_score english_score WEIGHTS 0.5 0.5
排名规则:分数相同按字典序排序
三、键设计规范与陷阱规避
3.1 命名规范
业务名:对象名:id[:字段]
# 好例子
SET order:10086:status "paid"
# 坏例子(无意义过长)
SET user_order_status_10086 "paid"
3.2 集群限制
Redis集群仅支持db0
多库设计在集群环境无效
3.3 过期时间陷阱
# 错误操作(覆盖过期时间)
SET key "new_value"
# 正确操作(保留过期时间)
SET key "new_value" KEEPTTL
四、真实业务场景应用
4.1 电商系统实践
4.2 社交平台方案
# 共同好友计算
SINTER user:1001:friends user:1002:friends
# 可能认识的人(差集)
SDIFF user:1001:friends user:1002:friends
# 影响力排行榜
ZADD influence_rank 982134 "KOL_123" 751289 "KOL_456"
五、高级技巧与性能优化
5.1 管道批处理
# Python示例(提升10倍吞吐)
pipeline = r.pipeline()
for i in range(1000):
pipeline.incr(f"counter:{i}")
pipeline.execute()
5.2 内存优化策略
小Hash:field数量<1000时使用ziplist编码
集合压缩:set-max-intset-entries配置
分片存储:大Hash按字段分片
5.3 延迟监控
# 检测慢查询
SLOWLOG GET 10
# 监控内存碎片
INFO MEMORY
Redis作为内存数据库,命令的合理使用直接决定系统性能。本文涵盖80%日常开发场景,剩余20%高级功能(Bitmaps/HyperLogLog/Streams)将在后续文章深度解析。
最后提醒:生产环境操作Redis时,务必通过redis-cli --stat
实时监控,避免大键操作导致服务阻塞!