Redis 数据类型业务使用场景
一、String(字符串)
主要场景
1缓存数据
bash
SET user:1001 "{name:'张三',age:25}"
EXPIRE user:1001 300 # 5分钟过期
2计数器
bash
文章阅读量
INCR article:1001:views
GET article:1001:views
限流器(每秒限制10次)
INCR api:limit:user1
EXPIRE api:limit:user1 1
3分布式锁
bash
SET lock:order:create "1" NX EX 30 # 不存在才设置,30秒过期
4Session存储
bash
SET session:abc123 "{userId:1001,loginTime:1621234567}"
EXPIRE session:abc123 3600
二、Hash(哈希)
主要场景
1用户信息存储
bash
用户对象
HMSET user:1001 name "李四" age 28 city "北京"
HINCRBY user:1001 age 1 # 生日加1岁
HGETALL user:1001
2购物车
bash
商品ID:数量
HSET cart:user1 product:1001 2
HSET cart:user1 product:1002 1
HINCRBY cart:user1 product:1001 -1 # 减少数量
3对象配置存储
bash
系统配置
HMSET config:payment alipay_enabled 1 wechat_enabled 0
三、List(列表)
主要场景
1消息队列
bash
生产者
LPUSH queue:order "订单数据"
消费者
BRPOP queue:order 30 # 阻塞获取
2最新列表
bash
最新10条微博
LPUSH timeline:user1 "微博内容1"
LTRIM timeline:user1 0 9 # 只保留10条
3历史记录
bash
用户浏览历史
LPUSH history:user1 "product:1001"
LTRIM history:user1 0 49 # 保留50条
四、Set(集合)
主要场景
1标签系统
bash
给文章打标签
SADD article:1001:tags "redis" "数据库" "缓存"
查找有redis标签的文章
SINTER tag:redis:articles tag:database:articles
2共同好友/兴趣
bash
用户A和用户B的共同好友
SINTER friends:userA friends:userB
可能认识的人(差集)
SDIFF friends:userB friends:userA
3抽奖/随机推荐
bash
SADD lottery:2024 user1 user2 user3
SRANDMEMBER lottery:2024 3 # 随机3个用户
SPOP lottery:2024 # 随机弹出(不可重复抽奖)
4数据去重
bash
爬虫URL去重
SADD crawled:urls "http://example.com/page1"
SISMEMBER crawled:urls "http://example.com/page1"
五、Sorted Set(有序集合)
主要场景
1排行榜
bash
游戏得分排行
ZADD leaderboard 5000 "player1" 4800 "player2"
ZREVRANGE leaderboard 0 9 WITHSCORES # 前10名
ZRANK leaderboard "player1" # 查看排名
2延迟队列
bash
订单超时处理(时间戳作为score)
ZADD delay:queue 1621234600 "order:1001"
ZRANGEBYSCORE delay:queue 0 1621234567 # 获取到期订单
3时间线/Feed流
bash
朋友圈按时间排序
ZADD feed:user1 1621234567 "post:1001"
ZREVRANGE feed:user1 0 9 # 最新10条
4范围查找
bash
查找积分在1000-2000的用户
ZRANGEBYSCORE users:score 1000 2000