一、前言
- Redis提供了多种数据结构,每种结构对应不同的应用场景。
- 本文对部分常用的核心数据结构和典型使用场景作出介绍。
二、String(字符串)
- 特点:二进制安全,可存储文本、数字、序列化对象等。
- 场景:
- 缓存:存储Session、Token、图片地址等。
- 计数器:文章阅读量(INCR)、秒杀库存(DECR)。
- 分布式锁:SETNX实现简单锁(需结合过期时间)。
- 示例命令:
SET user:1001 "{\"name\":\"Alice\",\"age\":25}"
INCR article:1001:views
三、Hash(哈希表)
- 特点:键值对集合,适合存储对象。
- 场景:
- 对象存储:用户信息(字段独立更新)、商品详情。
- 购物车:以用户ID为Key,商品ID为Field,数量为Value。
- 示例命令:
HSET user:1001 name Alice age 25
HINCRBY cart:1001 product:2001 1
四、List(列表)
- 特点:双向链表,支持栈/队列操作。
- 场景: 消息队列:简单任务队列(LPUSH+BRPOP)。
- 最新动态:朋友圈时间线(存储最新N条动态)。
- 示例命令:
LPUSH feed:1001 "New post: Redis guide"
LRANGE feed:1001 0 4
五、Set(集合)
- 特点:无序且唯一元素,支持交并差运算。
- 场景:
- 标签系统:用户兴趣标签(共同关注:SINTER)。
- 抽奖/黑名单:去重存储(如抽奖用户ID)。
- 示例命令:
SADD user:1001:tags tech database
SINTER user:1001:tags user:1002:tags
六、Sorted Set(有序集合)
- 特点:元素按Score排序,支持范围查询。
- 场景:
- 排行榜:游戏积分排名(ZREVRANGE)。
- 延迟队列:按时间戳排序处理任务。
- 示例命令:
ZADD leaderboard 5000 "PlayerA" 4800 "PlayerB"
ZREVRANGE leaderboard 0 9 WITHSCORES
七、拓展结构

八、使用建议
- 内存优化:小对象优先用Hash(比多个String更省内存)。
- 性能考量:高频写入场景慎用大Key(如长List/Hash)。
- 集群限制:集群模式下慎用跨节点操作(如Set交并差)。
- 通过合理选择数据结构,可以显著提升Redis的性能和资源利用率。