使用场景
目前规模
3400+集群、38000+个节点、1700+台服务器,集群总请求量超过5000万QPS/秒
应用案例
String
分布式缓存
Redis作为内存数据库,常被用做分布式缓存。合理的使用缓存,不仅可以提高响应速度,还能降低数据库压力。
计数器
如商品的浏览量、视频的播放数等场景,为了保证数据实时效,每次请求都需要计数+-1。Redis提供的INCR/DECR
命令在内存操作来实现计数器功能,非常适合计数场景。
全局自增ID
分布式会话
无状态的token或者有状态的Session集中管理是目前最为常用的方案,后者正式搭建以Redis等内存数据库为中心的session服务。
分布式锁
秒杀/扣减库存等并发量较大的场景下,传统使用数据库锁的方式已经无法满足。利用Redis的单线程处理特性,使用setnx
lua
脚本来保障分布式场景下锁的原子性。
对象存储
利用可以存储用户,订单,产品,商家,或者购物车信息
优点 | 缺点 | |
---|---|---|
String对象 | 简单 | 序列化/反序列化有一定CPU开销 |
Hash对象 | 简单直观,节省内存 | 注意ziplist/hashtable编码的转换,hashtable会消耗更多内存 |
队列
使用List存储最新上架的TOP 100商品,使用ltrim 指令对一个列表进行修剪
简单消息队列
时间轴(Timeline)
集合列表
利用Redis Set
的去重特性,交集/并集/差集功能,常常用在社交场景的共同好友,相似兴趣,我可能认识的人
商品标签
商品筛选
# 筛选商品:苹果品牌、ios系统、屏幕在6.0-6.24之间,LCD屏幕
sinter brand:apple os:ios screensize:6.0-6.24 screentype:lcd
抽奖
# 用户1参加action:01抽奖活动
sadd action:01 1
# 随机抽出两个人
srandmember action:01 2
# 或随机抽出两个人,并移除
spop action:01 2
用户关系,推荐模型
# 用户1和2关注的人
sadd follow:1 2,3,4
sadd follow:2 3,4,5
# 用户1和2共同关注的人
sinter follow:1 follow:2
# 我关注的人也关注了用户1
sismember follow:2 1
sismember follow:3 1
# 我可能认识的人
sdiff me follow:2
排行榜
热搜排名,播放排行榜等
# 点击话题
zincrby topic01 1
# 今日话题榜前9名
zrevrang topic20230101 0, 20 withscores
# 统计近3日点击数据,并存放的新的集合
zunionstore topic:3day 3 topic:20191022 topic:20191021 topic:20191020
# 展示近3日的排行前9名
zrevrange topic:20191022-20191020 0 9 withscores
位统计 bitmap
最近30天独立访问用户数量