redis大厂实战应用场景(一览众山小)

redis数据类型

redis数据类型有5种,分别是stringlistsethashzset,他们在各自领域里面都有哪些实践“应用场景”呢,请继续看完下面内容。

string(字符串)

也是我们最常用的数据类型,通常用于将数据转换后存储到到Redis缓存,常用的方法有set和get方法,这里就不做过多介绍。

  1. 计数器
    INCR article:readcount:{文章id}
  2. Web集群session共享
    Spring session + redis实现session共享
  3. 分布式系统全局序列号
    INCRBY orderId 1000 //批次生成

list(链表)

  1. 微信公众号和微博消息
    redis大厂实战应用场景(一览众山小)_第1张图片
  • 例如小马哥关注了InfoQ,阿里技术等大V
    1)InfoQ发公众号消息,消息ID为10010
    LPUSH msg:{小马哥-ID} 10010
    2)阿里技术发公众消息,消息ID为10016
    LPUSH msg:{小马哥-ID} 10016
    3)查看最新的公众号消息
    LRANGE msg:{小马哥-ID} 0 5
  1. 支付宝或者微信订单查询
    redis大厂实战应用场景(一览众山小)_第2张图片
    如何处理表一对多关系的设计,以订单为例子
    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(集合)

  1. 抽奖功能,支付宝内抽取华为P40商品,点击【参与抽奖】按钮,到底发生了什么?
    redis大厂实战应用场景(一览众山小)_第3张图片
    1)点击参与抽奖加入集合
    SADD raffle:product-0001 {userId}
    2)查看抽奖所有用户
    SMEMBERS raffle:product-0001
    3)抽取count名中奖者
    SRANDMEMBER raffle:product-0001 [count]或SPOP raffle:product-0001 [count]

  2. 电商商品筛选,究竟是如何实现?
    redis大厂实战应用场景(一览众山小)_第4张图片
    实现分类搜索
    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}

  3. 微信微博点赞、收藏、标签功能
    redis大厂实战应用场景(一览众山小)_第5张图片
    1)点赞
    SADD like:{消息ID} {用户ID}
    2)取消点赞
    SREM like:{消息ID}{用户ID}
    3)检查用户是否点过赞
    SISMEMBER like:{消息ID}{用户ID}
    4)获取点赞的用户列表
    SMEMBERS like:{消息ID}
    5)获取点赞用户数
    SCARD like:{消息ID}

  4. 微博微信实现关注模型
    redis大厂实战应用场景(一览众山小)_第6张图片
    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. 实现排行榜功能
    redis大厂实战应用场景(一览众山小)_第7张图片
    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

你可能感兴趣的:(分布式缓存,分布式架构)