redis数据类型
redis数据类型有5种,分别是string、list、set、hash、zset,他们在各自领域里面都有哪些实践“应用场景”呢,请继续看完下面内容。
string(字符串)
也是我们最常用的数据类型,通常用于将数据转换后存储到到Redis缓存,常用的方法有set和get方法,这里就不做过多介绍。
- 计数器
INCR article:readcount:{文章id} - Web集群session共享
Spring session + redis实现session共享 - 分布式系统全局序列号
INCRBY orderId 1000 //批次生成
list(链表)
- 微信公众号和微博消息
- 例如小马哥关注了InfoQ,阿里技术等大V
1)InfoQ发公众号消息,消息ID为10010
LPUSH msg:{小马哥-ID} 10010
2)阿里技术发公众消息,消息ID为10016
LPUSH msg:{小马哥-ID} 10016
3)查看最新的公众号消息
LRANGE msg:{小马哥-ID} 0 5
- 支付宝或者微信订单查询
如何处理表一对多关系的设计,以订单为例子
1)用户libiao有多个订单,订单key为order:1,order:2,order:3,结合hmset
hmset order:1 orderId 1 orderName:瑞信咖啡 money 36.6 time 2020-05-20
hmset order:2 orderId 1 orderName:京东商城 money 38.6 time 2020-05-20
hmset order:3 orderId 1 orderName:瑞信咖啡 money 39.6 time 2020-05-20
2)把订单信息的key放入队列
lpush user:libiao:order order:1 order:2 order:3
3)新产生一个订单order:4
hmset order:4 orderId 1 orderName:微信红包 money 49.6 time 2020-05-21
4)追加一个order:4放入队列第一个位置
lpush user:libiao:order order:4
5)当需要查询用户订单记录时
List orderKeys = lrange user:libiao:order 0 -1 //查询user:libiao所有订单key值
for (Order order: orderKeys){
hmget order:{1}
}
set(集合)
-
抽奖功能,支付宝内抽取华为P40商品,点击【参与抽奖】按钮,到底发生了什么?
1)点击参与抽奖加入集合
SADD raffle:product-0001 {userId}
2)查看抽奖所有用户
SMEMBERS raffle:product-0001
3)抽取count名中奖者
SRANDMEMBER raffle:product-0001 [count]或SPOP raffle:product-0001 [count] -
电商商品筛选,究竟是如何实现?
实现分类搜索
SADD brand:huawei P40
SADD brand:xiaomi mi-10
SADD brand:iphone iphone11
SADD os:android P40 mi-11 (按照操作系统放入集合)
SADD cpu:brand:intel P40 mi-11(按照CPU放入集合)
SADD ram:8g P40 mi-11 iphone11
(1) 查询android系统,CPU是Intel,8G内存手机,取交集
SINTER os:android cpu:brand:intel ram:8g—>{P40, mi-11}
(2) 查询iphone品牌,8G内存的手机,取交集
SINTER brand:iphone ram:8g—>{iphone11} -
微信微博点赞、收藏、标签功能
1)点赞
SADD like:{消息ID} {用户ID}
2)取消点赞
SREM like:{消息ID}{用户ID}
3)检查用户是否点过赞
SISMEMBER like:{消息ID}{用户ID}
4)获取点赞的用户列表
SMEMBERS like:{消息ID}
5)获取点赞用户数
SCARD like:{消息ID} -
微博微信实现关注模型
1) 例如小马哥关注人如下
mySet -> {mht,lyh,lj} 小马哥关注了马化腾,李彦宏,雷军;
2) 马化腾关注人如下
mhtSet -> {lqd,lyh,lj} 马腾哥关注了刘强东,李彦宏,雷军;
3)刘强东关注人如下
lqdSet -> {lqd,lyh,ncm} 马腾哥关注了刘强东,李彦宏,奶茶妹;
- 小马哥和马腾哥共同关注的人
SINTER mySet mhtSet -> {lyh,lj} - 小马哥关注的人也关注他(雷军)
SISMEMBER mySet lj - 小马哥可能认识的人
SDIFF mySet mhtSet ->{lqd}
zset(排序集合)
- 实现排行榜功能
1)点击新闻
ZINCRBY hostNew:20200520 1 {msgID:李现冲浪}
2)展示当日排行前十
ZREVRANGE hostNew:20200520 0 9 WITHSCORES
3)七日搜索榜单计算
ZUNIONSTORE hostNew:20200520-20200527 7 hostNew:20200520 hostNew:20200521…hostNew:20200527
4)展示七日排行前十
ZREVRANGE hostNew:20200520-20200527 0 9 WITHSCORES