一、前言
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的性能和资源利用率 。